返回

Puppeteer 让 Node.js 爬虫开发更简单

前端

1. 安装

npm install puppeteer

2. 简单使用

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({path: 'example.png'});

  await browser.close();
})();

3. 关于 Puppeteer 的具体使用

我肯定没法和官方文档相比的。下面就用几个业务场景的 demo 来作为参考吧。

3.1 登录行为

这里用了简书的登录页面做个尝试。当然它是带有反爬验证的。

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.jianshu.com/sign_in');

  // 输入用户名和密码
  await page.type('#username', 'username');
  await page.type('#password', 'password');

  // 点击登录按钮
  await page.click('.login-button');

  // 等待页面加载完成
  await page.waitForNavigation();

  // 获取登录后的页面内容
  const content = await page.content();

  await browser.close();

  console.log(content);
})();

3.2 爬取网页数据

这里用知乎的热榜数据做个演示。

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.zhihu.com/hot');

  // 获取热榜数据
  const hotList = await page.$('.hot-list li');
  const data = [];
  for (const item of hotList) {
    const title = await item.$eval('.title', el => el.textContent);
    const url = await item.$eval('.title a', el => el.href);
    const heat = await item.$eval('.heat', el => el.textContent);

    data.push({
      title,
      url,
      heat
    });
  }

  await browser.close();

  console.log(data);
})();

4. 结语

Puppeteer 是一个非常强大的工具,它可以让你在 Node.js 中轻松开发爬虫和自动化网页测试。如果你有这方面的需求,强烈推荐你使用 Puppeteer。