CheerioCrawler:如何在提取数据之前确保页面已完全加载?
CheerioCrawler: How do I ensure a page is fully loaded before extracting the data?
过去两天我一直在完善我要抓取的网站的 URL 列表。我的脚本(除数据提取外,与 CheerioCrawler 的示例基本相同)正在运行,但存在问题。本地保存在数据存储中的某些文档不完整。例如,在示例脚本中,某些已保存数据的标题字段为空白。在其他情况下,它都被保存了。每次保存的唯一字段是 url: request.url
.
我最好的猜测是我正在抓取的域非常慢,从其他域加载了多个脚本,而 Cheerio 只是爆破而不是等待整个页面完全加载后再提取任何数据它可以找到并继续前进。
要抓取的页面总数约为 2500,所以我不介意这个过程是否缓慢,但我想确保它是完整的。
如何确保页面在提取之前已完全加载?我以为 async
函数会自动执行此操作。
潜在的问题是网页使用 JavaScript 进行的异步 XHR 调用加载了一些内容。使用 CheerioScraper,您将从该站点上的第一个请求中获取数据。如果要加载异步内容,需要使用浏览器打开页面。
只需要在puppeteer页面界面使用PuppeteerCrawler. It has quite a similar interface as CheerioCrawler. It opens webpage for each request. You can use there various waitFor functions等待你想要的内容即可。
CheerioCrawler
使用 Cheerio 库,这是一个简单的 HTML 解析器。它无法执行 JavaScript、下载额外资产或发出 AJAX 请求来获取额外数据。
如果您看到不完整的结果,这意味着您尝试抓取的页面动态加载数据,因此数据在 Cheerio 解析的初始 HTML 中不可用。可悲的是,这是技术的局限性。要呈现页面并等待它们加载,您可以使用可以为您完成繁重工作的浏览器。参见 PuppeteerCrawler
。
过去两天我一直在完善我要抓取的网站的 URL 列表。我的脚本(除数据提取外,与 CheerioCrawler 的示例基本相同)正在运行,但存在问题。本地保存在数据存储中的某些文档不完整。例如,在示例脚本中,某些已保存数据的标题字段为空白。在其他情况下,它都被保存了。每次保存的唯一字段是 url: request.url
.
我最好的猜测是我正在抓取的域非常慢,从其他域加载了多个脚本,而 Cheerio 只是爆破而不是等待整个页面完全加载后再提取任何数据它可以找到并继续前进。
要抓取的页面总数约为 2500,所以我不介意这个过程是否缓慢,但我想确保它是完整的。
如何确保页面在提取之前已完全加载?我以为 async
函数会自动执行此操作。
潜在的问题是网页使用 JavaScript 进行的异步 XHR 调用加载了一些内容。使用 CheerioScraper,您将从该站点上的第一个请求中获取数据。如果要加载异步内容,需要使用浏览器打开页面。
只需要在puppeteer页面界面使用PuppeteerCrawler. It has quite a similar interface as CheerioCrawler. It opens webpage for each request. You can use there various waitFor functions等待你想要的内容即可。
CheerioCrawler
使用 Cheerio 库,这是一个简单的 HTML 解析器。它无法执行 JavaScript、下载额外资产或发出 AJAX 请求来获取额外数据。
如果您看到不完整的结果,这意味着您尝试抓取的页面动态加载数据,因此数据在 Cheerio 解析的初始 HTML 中不可用。可悲的是,这是技术的局限性。要呈现页面并等待它们加载,您可以使用可以为您完成繁重工作的浏览器。参见 PuppeteerCrawler
。