与 Puppeteer 集成

调用 SDK

与 Puppeteer 集成请参考 与 Node.js 爬虫集成,只需要调用 crawlab.saveItem 方法。

避免内存泄漏

由于 Puppeteer 是利用 Chromium 来运行爬虫,因此在爬虫关闭的时候很可能会造成浏览器未关闭的情况。为了解决这个问题,我们需要用 dumb-init 这个工具来运行爬虫。在创建 Puppeteer 爬虫时,请在 执行命令 里输入以下内容。

  1. dumb-init -- <command>

<command> 为实际执行命令,例如 node spider.js。因此,总的 执行命令 为如下内容。

  1. dumb-init -- node spider.js

对于 Docker 用户,因为内置了 dumb-init,可以直接使用该工具。对于直接部署用户,需要自行下载。

启动 Puppeteer 的正确方式

Puppeteer 是依赖 Chromium 来作为引擎的,因此需要知道 Chromium 的正确执行路径,我们推荐使用 puppeteer-chromium-resolver 来启动 Puppeteer。如果您是预装 Node.js 或者在界面上安装 Node.js 的话,puppeteer-chromium-resolver 是内置的。

以下是启动 Puppeteer 的例子。

  1. ...
  2. const pcr = await PCR({
  3. folderName: '.chromium-browser-snapshots',
  4. hosts: ["https://storage.googleapis.com", "https://npm.taobao.org/mirrors"],
  5. retry: 3
  6. });
  7. const browser = await pcr.puppeteer.launch({
  8. headless: true,
  9. args: ['--no-sandbox'],
  10. executablePath: pcr.executablePath
  11. }).catch(function (error) {
  12. console.log(error);
  13. });
  14. const page = await browser.newPage();
  15. ...

具体例子请参考 Github 上 京东口罩商品抓取爬虫