搜索结果没有出现要抓取

时间:2018-08-13 15:47:16

标签: python web-scraping beautifulsoup urllib

最近我一直在学习网络抓取,目的是抓取一些新闻站点。今天,我首先尝试抓取一些搜索结果,但是令我惊讶的是,即使我可以在Google Chrome浏览器的检查器中找到它们,也没有出现在我的BeautifulSoup对象上。

我尝试抓取该网站:https://www.latercera.com/search/?q=camila%20vallejo

我注意到链接位于div标签下,类为'gsc-wrapper',所以我尝试:

html = urlopen('https://www.latercera.com/search/?q=camila%20vallejo')
bs = BeautifulSoup(html, 'html.parser')
bs.find('div',{'class':'gsc-wrapper'})

但这带来了Nonetype。在检查了对象中的每个链接之后,就没有搜索结果链接的踪迹。任何人都知道会发生什么事吗?

编辑:忘了提及,我可以在解析树中找到的最低代码是:

bs.find('div',{'class':'searchresults'})

仅带来:

<div class="searchresults">
<gcse:searchresults-only></gcse:searchresults-only>
</div>

即使它应该带来每个搜索结果

2 个答案:

答案 0 :(得分:2)

设法解决。正如弗雷迪(Freddie)所建议的那样,我正在使用JavaScript呈现的网页,因此我需要使用硒才能抓取网络:

from selenium import webdriver
browser=webdriver.Chrome()
url = "https://www.latercera.com/search/?q=camila%20vallejo"
browser.get(url) #navigate to the page
innerHTML = browser.execute_script("return document.body.innerHTML")

这样我就可以取消想要的东西。

答案 1 :(得分:1)

我可以看到问题所在。您正在寻找一个名为“ gsc-wrapper”的类,但是在查看页面源代码(与检查不同)时,没有该名称的类。

我的猜测是它是通过JavaScript动态生成的,然后将自身注入到searchresults标签中。如果要抓取此内容,则需要先完全渲染页面,javascript和所有内容,然后才能进行解析。

Look here for more help.