0

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

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

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

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

4

2 回答 2

1

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

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

于 2019-07-22T11:12:10.407 回答
1

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

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

于 2019-07-22T11:13:25.323 回答