BeautifulSoup:只有点击"接受"才能访问HTML。在同一个网址中

时间:2016-04-18 21:09:04

标签: python beautifulsoup

我试图从某个网址抓取一些信息。我们称之为:www.foo.bar/baz

当您使用网络浏览器访问该网址时,通常情况下,我的年龄超过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>

为了做到这一点,我会很感激为什么要研究。

1 个答案:

答案 0 :(得分:3)

您无法使用Beautifulsoup与Javascript交互,您可以使用selenium点击使用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并继续使用它,但是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>]

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