一、概述
一、概述
在Node.js中,Puppeteer是一个高效的爬虫工具。因为它使用的是Chrome浏览器的Headless模式,可以对JavaScript动态生成的网页进行操作。同时,Puppeteer还提供了WebAPI,可以模拟用户的行为,如键盘鼠标操作、表单提交等。本攻略将详细讲解使用Puppeteer完成一次复杂的爬虫。
二、安装Puppeteer
npm install puppeteer
三、使用Puppeteer
1.启动浏览器
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// ... more code
await browser.close();
})();
2.访问页面
await page.goto('http://example.com');
3.截图
await page.screenshot({
path: 'example.png'
});
4.获取元素
const usernameInput = await page.$('#username');
5.模拟用户行为
await usernameInput.type('admin');
6.表单提交
await Promise.all([
page.click('#submit'),
page.waitForNavigation()
]);
7.获取响应
const response = page.waitForResponse('url');
const body = await response.text();
四、示例说明
1.爬取图片
const puppeteer = require('puppeteer');
const http = require('http');
const fs = require('fs');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('http://example.com');
const imageLinks = await page.evaluate(() => {
const links = [];
document.querySelectorAll('img').forEach(img => {
links.push(img.src);
});
return links;
});
imageLinks.forEach((src, index) => {
http.get(src, response => {
response.pipe(fs.createWriteStream(`${index}.png`));
})
});
await browser.close();
})();
2.爬取动态生成的数据
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.example.com/page/1');
while (true) {
const data = await page.evaluate(() => {
const list = [];
document.querySelectorAll('.item').forEach(item => {
const title = item.querySelector('.title').innerText;
const author = item.querySelector('.author').innerText;
list.push({
title,
author
});
});
return list;
});
console.log(data);
const nextButton = await page.$('.next');
if (nextButton) {
await nextButton.click();
await page.waitForNavigation();
} else {
break;
}
}
await browser.close();
})();
以上就是使用Puppeteer完成一次复杂的爬虫攻略的详细讲解。
沃梦达教程
本文标题为:详解Node使用Puppeteer完成一次复杂的爬虫
基础教程推荐
猜你喜欢
- MySQL如何判断字符串为NULL或者为空字符串 2022-10-23
- PostgreSQL12.5中分区表的一些操作实例 2023-07-21
- 从mysql读写分离着手提升服务器性能 2023-07-27
- MySQL定位并优化慢查询sql的详细实例 2024-01-02
- MySQL系列教程小白数据库基础 2023-08-06
- SQL Server数据库生成与执行SQL脚本详细教程 2023-07-29
- 海量数据库的查询优化及分页算法方案集合1/2第1/2页 2024-01-02
- redis中opsForList().range()的使用方法详解 2023-07-13
- 数据库报错:Unknown column ‘xxx’ in ‘where clause’问题的解决过程 2023-12-07
- SQL Server 2005基础知识详细整理 2024-02-12