Node爬虫工具Puppeteer入门教程实践
什么是Puppeteer?
Puppeteer 是 Google 推出的一个 Node 库,通过使用这个库可以方便的控制浏览器并进行网页爬取、数据提取等操作。Puppeteer 使用了类似 Chrome DevTools Protocol 的协议进行通信,所以我们可以直接通过 JavaScript 控制 Chrome 或 Chromium。具体来说,它可以做到:
- 页面截图、PDF生成
- 模拟用户操作(如点击、输入等)
- 网络数据获取(如 AJAX 请求、WebSocket 数据获取等)
- 页面自动化测试
安装Puppeteer
我们可以使用 npm 来安装 Puppeter。
在控制台执行如下命令:
npm install puppeteer
使用Puppeteer
下面介绍两个示例说明如何使用Puppeteer进行网页爬取。
示例一:爬取网页标题
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.baidu.com');
const title = await page.title();
console.log(title);
await browser.close();
})();
上面的代码中,我们通过 puppeteer.launch()
方法打开了一个 Chromium 浏览器实例,并通过 browser.newPage()
方法打开了一个新的页面,随后通过 page.goto()
方法加载了百度网站并等待加载完成。最后我们通过 page.title()
方法获取了网页的标题,打印出来。
示例二:抓取淘宝首页热门商品列表信息
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.taobao.com');
const items = await page.evaluate(() => {
const items = [];
const itemList = document.querySelectorAll('.J_Module.flags');
itemList.forEach((item) => {
const title = item.querySelector('.cate-title').textContent.trim();
const products = [];
item.querySelectorAll('.cate-one').forEach((product) => {
const name = product.querySelector('.name').textContent.trim();
const price = product.querySelector('.price').textContent.trim();
products.push({
name,
price,
});
});
items.push({
title,
products,
});
});
return items;
});
console.log(items);
await browser.close();
})();
这段代码中,我们首先打开了淘宝首页,然后通过 page.evaluate()
方法利用 DOM API 来获取页面中的商品信息,最后将结果打印出来。
结语
Puppeteer 的使用非常灵活,我们可以通过它来实现各种各样的功能,比如网页自动化测试、控制浏览器生成 PDF 文件、模拟用户操作等。在使用过程中需要注意的是,爬虫的行为需要遵守网站的规定,否则可能会触发反爬虫机制,甚至可能会产生法律风险。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node爬虫工具Puppeteer入门教程实践 - Python技术站