【问题标题】:Why is the div I'm scraping coming back as empty为什么我正在抓取的 div 是空的
【发布时间】:2020-12-08 02:20:39
【问题描述】:

我正在 William Hill 网站上使用 node 和cheerio 练习一些网络抓取,但是当我到达代码中的某个点时,它几乎停止了,尽管 div 充满了 html 和 inspect 元素显示了这一点,并且调用 .html() 时,它只返回 ,就好像它是空的一样。此 div 中的任何元素定位都返回 null。

request('https://sports.williamhill.com/betting/en-gb/football/competitions/OB_TY295/English-Premier-League/matches/OB_MGMB/Match-Betting', (error, response, html) => {
    if(!error && response.statusCode == 200){
        const $ = cheerio.load(html)

        const bet = $('#football div[data-test-id="events-group"]')

        console.log(bet.html())
        
    }
})

我对网络抓取完全陌生,所以我希望这是有道理的,如果可能的话,请尽量“简化”你的答案。谢谢

【问题讨论】:

    标签: node.js web-scraping cheerio


    【解决方案1】:

    网站管理员部署了许多防止屏幕抓取的保护措施来防止这种情况发生。其中一些是限制来自 IP 地址的请求,在标头中查找特定信息(如浏览器类型),其中一些甚至是某些类型的 cookie。

    正如 AbdulSohu 所指出的,curl 什么都不返回(直接请求甚至 JavaScript 提取都不会),因为该请求缺少 Web 服务器为您提供 html 所需的内容。它也很脆弱,因为网站可以更改其 html 代码。

    Selenium 是一种选择,但如果您想深入研究它,请开始调查使用请求从该站点返回某些内容所需的最低要求,方法是添加适当的标头以欺骗 Web 服务器,使其误以为您是浏览器。

    祝你好运,玩得开心!

    【讨论】:

      【解决方案2】:

      我尝试了以下方法以真正查看是否可以通过您发布的特定链接获得一些东西:

      curl "https://sports.williamhill.com/betting/en-gb/football/competitions/OB_TY295/English-Premier-League/matches/OB_MGMB/Match-Betting"
      

      如果你不知道curl 是什么,你可以多了解一下here。该命令应该在我的终端中将此特定页面的 html 内容返回给我。我得到了什么?

      <html></html>

      所以,基本上,什么都没有。

      通常,当您尝试在由非常特定的超链接指定的 html 页面上定位特定容器和 divs 时,您可能会遇到很多问题。例如,网站管理员可以更改 divs 的名称,超链接可以重定向到其他地方等。

      不过,不太可能发生的是它们会改变网站的结构。它仍然有可能发生,只是可能性较小。因此,在这种情况下,如果您可以编写一个Selenium 程序来像人类使用检查元素一样浏览和抓取页面,这可能会非常有益。比如我找到了this初学者教程。

      【讨论】:

      • 我正在尝试使用 selenium 加载页面,但它只是将浏览器加载到“data:text/html;charset=utf-8”,而不是我指定的页面。你知道我做错了什么吗? const { Builder, By, Key, util } = require('selenium-webdriver') const example = async () => { let driver = await new Builder().forBrowser('chrome').build() await 驱动程序。 get('google.com/') } 例子()
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 2021-03-26
      • 1970-01-01
      • 2020-03-05
      • 1970-01-01
      • 2016-04-01
      • 2011-04-16
      相关资源
      最近更新 更多