【问题标题】:CheerioCrawler: How do I ensure a page is fully loaded before extracting the data?CheerioCrawler:如何在提取数据之前确保页面已完全加载?
【发布时间】:2019-07-21 01:47:53
【问题描述】:

过去两天我一直在完善我想要抓取的网站的网址列表。我的脚本(除了数据提取之外与CheerioCrawler 的示例基本相同)正在运行,但是有一个问题。本地保存在数据存储中的一些文档不完整。例如,在示例脚本中,某些已保存数据中的标题字段为空白。在其他人中,这一切都被保存了。每次唯一保存的字段是url: request.url

我最好的猜测是,我正在抓取的域非常慢,从其他域加载了多个脚本,而 Cheerio 只是快速浏览,而不是等待整个页面完全加载,然后再提取它可以提取的任何数据找到,然后继续。

要抓取的页面总数约为 2500,所以我不介意这个过程是否缓慢,但我想确保它是完整的。

如何确保页面在提取之前已完全加载?我认为async 函数会自动执行此操作。

【问题讨论】:

    标签: javascript web-crawler puppeteer apify


    【解决方案1】:

    潜在的问题是网页使用 JavaScript 进行的异步 XHR 调用加载了一些内容。使用 CheerioScraper,您将从该站点上的第一个请求中获取数据。如果要加载异步内容,需要使用浏览器打开页面。

    您只需使用PuppeteerCrawler 就可以做到这一点。它的界面与 CheerioCrawler 非常相似。它为每个请求打开网页。您可以在 puppeteer 页面界面中使用各种waitFor functions 来等待您想要获取的内容。

    【讨论】:

      【解决方案2】:

      CheerioCrawler 使用 Cheerio 库,这是一个简单的 HTML 解析器。它无法执行 JavaScript、下载其他资产或发出 AJAX 请求以获取其他数据。

      如果您看到不完整的结果,这意味着您尝试抓取的页面会动态加载数据,因此 Cheerio 解析的初始 HTML 中不提供数据。可悲的是,这是该技术的限制。要呈现页面并等待它们加载,您可以使用可以为您完成繁重工作的浏览器。见PuppeteerCrawler

      【讨论】:

        猜你喜欢
        • 2023-01-02
        • 1970-01-01
        • 1970-01-01
        • 2021-10-25
        • 1970-01-01
        • 2016-01-06
        • 2020-02-08
        • 2022-01-22
        • 1970-01-01
        相关资源
        最近更新 更多