2016-04-18 82 views
2

我试图从某个URL中获取一些信息。我们称之为:www.foo.bar/bazBeautifulSoup:在同一个URL中单击“接受”后,只能访问HTML页面

当您使用网络浏览器访问该URL时,会出现通常的“我比18岁大”按钮。 URL不会更改,只有在手动点击所述按钮时才会加载实际内容。

我想“模拟”,点击“我比18岁更老”按钮,以便能够访问我真正想要抓取的信息。

这是按钮的HTML代码应该被点击的是:

<div align=center> 
    <a href="javascript:showContent()"><span>ENTRAR</span></a> 
</div> 

这是JavaScript函数,得到由href属性称为:

<script type="text/javascript"><!-- 
function showContent() { 
    document.getElementById('all-content').style.display = ''; 
    document.getElementById('adultmessage').style.display = 'none'; 
    document.cookie = 'adult=yes; path=/'; 
} 
function hideAdultContent(){ 
    document.getElementById('all-content').style.display = 'none'; 
} 
// --></script> 

我将不胜感激任何提示在做什么研究。

+1

你能分享链接吗? –

+1

@Xar,就像Padraic说的那样。硒是你最好的选择。查看[slack](https://github.com/Wykleph/Slack)框架,因为它可能会帮助您保持组织结构。 – DuckPuncher

+0

@PadraicCunningham网址是http://www.pasion.com/amistad/您必须点击“Entrar”才能访问真实内容。 – Xar

回答

3

不能使用Beautifulsoup的JavaScript交互,可以使用硒点击使用它的元素与PhantomJS无头浏览:

from selenium import webdriver 

dr = webdriver.PhantomJS() 

dr.get("www.foo.bar/baz") 

dr.find_element_by_xpath("//a[@href='javascript:showContent()']").click() 

中的XPath会发现元素,那么我们模拟点击这应该给你需要什么。

我相信该网站是在西班牙这样的HREF实际上javascript:muestradulto()是:

dr.find_element_by_xpath("//a[@href='javascript:muestradulto()']").click() 

一旦链接被点击,你print(dr.page_source),你会发现你得到它具有EL BUSCANUNCIOS接近顶部的下一个页面:

In [1]: url = "http://www.pasion.com/amistad/" 

In [2]: from selenium import webdriver 

In [3]: dr = webdriver.PhantomJS() 

In [4]: dr.get(url) 

In [5]: dr.find_element_by_xpath("//a[@href='javascript:muestradulto()']").click() 

In [6]: print("EL BUSCANUNCIOS" in dr.page_source) 
True 

如果你喜欢使用BS4您可以将源传递给BeautifulSoup和以外的地方工作之上,但硒可以让你使用XPath和更大范围的CSS选择器,你可能会发现更多有用的。

其实,如果你看一下网页的回报,你只是用实际的请求得到源代码,链接只需要点击网页上:

In [14]: from requests import get 

In [14]: from bs4 import BeautifulSoup 

In [15]: soup = BeautifulSoup(get(url).content) 

In [16]: print(soup.select("#cuerpo div[class^=x]")[:2]) 
[<div class="x1"><div class="x2">\n<div class="x3"></div>\n<div class="x4">Amistad en Barcelona i rodalies (BARCELONA)</div>\n<div class="x5">r508491244 </div>\n<div class="x6" style="font-size:8px"><a href="/creditos/auto-renueva.php" style="color:#ee0000">AUTO\xb7RENUEVA</a></div>\n</div>\n<div class="x9"><a class="cti" href="para-mujer-busque-amistad-508491244.htm" target="_blank">PARA MUJER BUSQUE AMISTAD</a><br/><div class="tx"> Deseo coincidir con una mujer que busque una relaci\xf3n de amistad continuada con un hombre maduro, tranquilo, educado, cari\xf1oso y de trato f\xe1cil. No tengo pareja y ahora no la busco. Busco una amiga para pasear, hablar, echar unas risas, caf\xe9s, cines, conciertos, etc. No me importa para nada la talla de suje ni de pantal\xf3n que usas, ni tu edad, ni tampoco si tienes eso que ahora se llaman cargas. Soy un tipo normal y busco lo mismo. Si necesitas algo m\xe1s, tambi\xe9n lo podemos hablar. Con afecto. Dani. Edad 54 a\xf1os</div><br/> <div class="x11">\n</div>\n</div>\n<div class="x10" id="ph508491244" style="width: auto">\n</div></div>, <div class="x2">\n<div class="x3"></div>\n<div class="x4">Amistad en Barcelona i rodalies (BARCELONA)</div>\n<div class="x5">r508491244 </div>\n<div class="x6" style="font-size:8px"><a href="/creditos/auto-renueva.php" style="color:#ee0000">AUTO\xb7RENUEVA</a></div>\n</div>] 

所以你实际上并不需要担心点击任何东西。

+0

谢谢Padraic!很好的解释!还有一个小问题:你从哪里得到get方法?我必须输入什么?在你的第15行中,我得到'NameError:name'get'is not defined'错误信息。 – Xar

+1

对不起,本来打算复制粘贴的,应该有个'从请求进口得到' –

+0

再次谢谢! – Xar

相关问题