不能使用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>]
所以你实际上并不需要担心点击任何东西。
你能分享链接吗? –
@Xar,就像Padraic说的那样。硒是你最好的选择。查看[slack](https://github.com/Wykleph/Slack)框架,因为它可能会帮助您保持组织结构。 – DuckPuncher
@PadraicCunningham网址是http://www.pasion.com/amistad/您必须点击“Entrar”才能访问真实内容。 – Xar