【问题标题】:Search results not appearing for scraping搜索结果不显示为抓取
【发布时间】:2019-01-20 09:47:56
【问题描述】:

最近我一直在学习网络抓取,目的是抓取一些新闻网站。今天我第一次尝试抓取一些搜索结果,但令我惊讶的是,即使我可以在 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'})

但这带来了一个无类型。检查我的对象中的每个链接后,没有搜索结果链接的痕迹。有人知道会发生什么吗?

编辑:忘了提,我可以在解析树中找到的最低点在这里:

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

这只会带来:

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

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

【问题讨论】:

    标签: python web-scraping beautifulsoup urllib


    【解决方案1】:

    设法解决它。正如 Freddie 建议的那样,我正在处理一个 JavaScript 渲染的网页,所以我需要使用 selenium 来报废网络:

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

    这样我就可以废弃我想要的。

    【讨论】:

      【解决方案2】:

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

      我的猜测是它是通过 JavaScript 动态生成的,然后将自身注入到 searchresults 标记中。如果你想抓取这个,你需要页面完全呈现、javascript 和所有内容,然后才能解析。

      Look here for more help.

      【讨论】:

      • 你可以使用'class'作为CSS选择器(字典符号)
      • 所以没有办法废弃搜索结果?
      猜你喜欢
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 1970-01-01
      • 2021-12-31
      • 2012-08-05
      • 2018-07-26
      相关资源
      最近更新 更多