爬虫高级范式:使用无头浏览器puppeteer 模拟,克服js异步加载

内容目录

使用 Puppeteer 爬取网页通常分为以下几个步骤。Puppeteer 是一个基于 Node.js 的库,允许你控制无头浏览器(headless browser),并模拟用户与网页的交互。

步骤 1: 安装 Puppeteer

首先,你需要安装 Puppeteer。你可以使用 npm(Node.js 包管理工具)来安装它:

npm install puppeteer

npm install puppeteer 会自动下载并安装一个版本的 Chromium(而不是 Google Chrome)作为 Puppeteer 的依赖。Puppeteer 会默认与一个特定版本的 Chromium 配合使用,这样你就不需要单独安装浏览器了。这个 Chromium 版本是 Puppeteer 自带的,并且是为了确保与 Puppeteer 的兼容性而提供的。

步骤 2: 编写爬虫脚本

示例代码:

const puppeteer = require('puppeteer');

(async () => {
  // 启动无头浏览器
  const browser = await puppeteer.launch({ headless: true });

  // 创建一个新的页面
  const page = await browser.newPage();

  // 导航到目标网页
  await page.goto('https://example.com');

  // 获取页面的内容,或者可以提取具体的元素
  const pageTitle = await page.title(); // 获取页面标题
  console.log('Page Title:', pageTitle);

  // 获取页面上的某些元素,使用选择器
  const heading = await page.$eval('h1', el => el.textContent);
  console.log('Heading:', heading);

  // 如果需要提取多个元素
  const links = await page.$$eval('a', links => links.map(link => link.href));
  console.log('Links:', links);

  // 关闭浏览器
  await browser.close();
})();

步骤 3: 执行脚本

你可以在命令行中执行上述脚本:

node scraper.js

代码解释:
• puppeteer.launch():启动无头浏览器。headless: true 表示启动无头模式,即没有图形界面的浏览器。
• page.goto(url):让 Puppeteer 导航到指定的 URL。
• page.title():获取网页标题。
• page.$eval(selector, callback):选择页面上的某个元素并执行回调函数来提取该元素的内容。
• page.$$eval(selector, callback):选择多个元素并执行回调函数来提取它们的内容。
• browser.close():关闭浏览器。

步骤 4: 在浏览器中等待动态内容加载

如果你爬取的网页内容是动态加载的(比如使用 JavaScript 渲染的内容),你可能需要等页面加载完成后再进行数据提取。你可以使用 page.waitForSelector 来等待特定元素加载:

await page.waitForSelector('.dynamic-element'); // 等待页面上的特定元素加载

其他常见功能:

  1. 模拟用户操作:如点击按钮、填写表单等。

await page.click(‘#button’);
await page.type(‘#input’, ‘example text’);

  1. 截屏/截图:

await page.screenshot({ path: ‘screenshot.png’ });

  1. 获取页面 HTML 内容:

const html = await page.content();
console.log(html);

  1. 执行 JavaScript 脚本:

const result = await page.evaluate(() => {
return document.title;
});
console.log(result);

重要注意事项:
• 确保遵守目标网站的 robots.txt 文件中关于爬虫的规则。
• 如果目标网站反爬虫机制较强,可能需要使用代理、模拟用户行为(如随机等待时间)等策略来绕过限制。
• Puppeteer 适合抓取需要 JavaScript 渲染的页面,对于静态页面(仅包含 HTML)可以使用更轻量级的工具,如 Axios 或 Cheerio。

浏览量(2) | 此条目发表在未分类分类目录。将固定链接加入收藏夹。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据