Python BeautifulSoup:只有在同一URL中单击“接受”后才能访问刮取HTML

Python BeautifulSoup:只有在同一URL中单击“接受”后才能访问刮取HTML,python,beautifulsoup,Python,Beautifulsoup,我正试图从某个URL中获取一些信息。我们称之为:www.foo.bar/baz 当您使用web浏览器访问该URL时,通常会出现“我大于18岁”按钮。URL不会更改,只有当您手动单击所述按钮时,才会加载真正的内容 我想模拟一下点击“我超过18岁”按钮,以便能够访问我真正想要获取的信息 这是应单击的按钮的HTML代码: <div align=center> <a href="javascript:showContent()"><span>ENTRAR<

我正试图从某个URL中获取一些信息。我们称之为:www.foo.bar/baz

当您使用web浏览器访问该URL时,通常会出现“我大于18岁”按钮。URL不会更改,只有当您手动单击所述按钮时,才会加载真正的内容

我想模拟一下点击“我超过18岁”按钮,以便能够访问我真正想要获取的信息

这是应单击的按钮的HTML代码:

<div align=center>
    <a href="javascript:showContent()"><span>ENTRAR</span></a>
</div>
这是由href属性调用的JavaScript函数:

<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>

如果您有任何关于如何进行研究的建议,我将不胜感激。

您不能使用Beautifulsoup与Javascript交互,您可以使用selenium单击元素,使用它进行无头浏览:

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.page_source后,您将看到进入下一个页面,该页面顶部有EL Buscanuncos:

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,然后继续处理,但selenium允许您使用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说的那样。硒是你最好的选择。请查看框架,因为它可能会帮助您保持组织。@Padraiccanningham url是您的url,您必须单击Entar才能访问真正的内容。@Xar,如果您右键单击并查看源代码,您会发现您确实得到了它,则该按钮仅在您在浏览器中访问页面时才相关谢谢Padraic!很好的解释!还有一个小问题:get方法来自哪里?我需要进口什么?在您的第15行中,我收到了名称错误:名称“get”未定义错误消息。很抱歉,为了复制粘贴,应该有一个来自导入get的请求
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>]