【问题标题】:Problem scraping Bet365 with headless mode使用无头模式抓取 Bet365 时出现问题
【发布时间】:2023-02-25 22:47:40
【问题描述】:

几天前,我开始开发一个机器人来捕获虚拟运动(特别是足球)的数据/结果Bet365(注意:我知道网站的使用条款不允许这样做,但我的目的只是“个人学习”).

网络抓取的技术和替代方案并不难在互联网上获得。限制是(我最近发现了这一点)旨在获取数据的站点的安全性。开门见山,我使用 python/selenium 开发了以下脚本/算法:

  1. 访问网址:https://www.game-365.com/#/AVR/B146/R%5E1/
  2. 点击冠军标签之一(欧洲杯、英超、超级联赛、世界杯);
  3. 点击“结果”下面的选项卡;
  4. 读取 HTML 并从出现的两个结果中提取信息;
  5. 对其他选项卡重复步骤 2-4;

    很简单。它已经开始工作了。但如果一切顺利,我就不会在这里。如果我在不传递 --headless 参数的情况下使用 webdriver.Chrome 运行应用程序,则会成功检索信息。我每 3 分钟运行一次扫描,并在网站更新时验证结果是否正确。

    然而,最重要的是我可以使用 headless 模式运行这个脚本,因为我的目标不是让我的个人电脑一天 24 小时开着来完成我的目标,而是将这个应用程序上传到服务器——这不会有图形界面。

    考虑到这一点,我使用 --headless 参数继续进行测试,我注意到页面内容不再更新。我可以让脚本运行数小时和数小时,而游戏则从“结果”选项卡将始终相同。而这一切只是因为我使用了无头模式。

    谷歌搜索找到了undetected_chromedriver 替代方案。不幸的是,它也没有解决问题。

    我没有太多要评论的。这个问题更多地与 Bet365 网站的工作方式有关,而不是与硒本身的使用有关。因此,我知道答案非常限于对这个主题感兴趣的特定人群。

    下面我将留下找到项目代码的存储库的链接以及其他一些尝试:

    存储库链接:https://gitlab.com/noleto-web-scraping/bet365_scrap.git

    通过 API 解决:

    监控开发者控制台,我可以看到当点击结果选项卡时,Bet365 网站发出以下请求:https://www.bet365.com/SportsBook.API/web?lid=33&zid=0&pd=%23AVA%23B146% 23C20700663%23R%5E1%23&cid=28&cgid=1&ctid=28

    此请求的结果是具有非常特殊格式的文本,但稍加努力就可以提取填满屏幕的相同信息。通过将请求数据复制为 cURL 并将其导入到 Postman 中,可以获得信息。除了请求的查询参数之外,还有一组标头,我想它们决定了请求的验证/安全性。包括大家津津乐道的X-Net-Sync-Term。

    1. 将请求复制为 cURL:https://i.imgur.com/VZui1no.png
    2. 在 Postman 导入:https://i.imgur.com/Dqk9PsE.png

      等待几分钟,我再次进行同样的测试:点击“结果”选项卡,检查开发人员面板,复制为 cURL 并在 Postman 中播放。最奇怪的事情现在发生了。尽管在网站上,结果显示已更新在邮递员中(即使导入了所有标题 - 包括不同的 X-Net-Sync-Term 值)返回是从未更新.

      有什么我一直无法弄清楚是什么决定了服务器要返回什么数据:最新的或“IP 缓存”(我的猜测)。

      通过 Puppeteer 解决

      研究网络抓取我决定改变我的方法,而不是使用 python/selenium,我使用 node/puppeteer 来运行我上面提到的相同算法来获取相同的信息。

      与 selenium 不同,selenium 至少在不在 headless mode 时会显示更新的信息,而使用 puppeteer 则不会发生这种情况,并且捕获的信息始终相同,而不管 headless mode

      除了硒,我还寻找了一些解决方案并找到了puppeteer-extra-plugin-stealth plugin。也是徒劳。

      使用 node/puppeteer 构建的脚本的存储库:https://gitlab.com/noleto-web-scraping/bet365_puppeteer

      结论

      我已经研究了好几天,但只找到去年的旧讨论。我发现 Bet365 是一个比我想象的更受保护的网站,但我知道有其他方法可以获取此信息,因为出售的 api、机器人等使用此信息。

      此外,只要答案可能需要,我就在这里,因为没有太多其他事情可以运行/重复。

【问题讨论】:

  • 由于缺乏重点和/或请求资源建议,应该关闭此问题。有 6 个已删除的答案。

标签: python selenium web-scraping postman puppeteer


【解决方案1】:

你让这个工作了吗?渴望与您联系,看看这是如何完成的,以及您是否成功了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2021-05-11
    • 2018-05-05
    相关资源
    最近更新 更多