最近我一直在学习网络抓取,目的是抓取一些新闻站点。今天,我首先尝试抓取一些搜索结果,但是令我惊讶的是,即使我可以在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>
即使它应该带来每个搜索结果
答案 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和所有内容,然后才能进行解析。