本教程将带你了解如何使用Puppeteer进行高效的网页抓取,特别适合处理动态内容和应对反爬虫策略。
无头模式下,启动速度提升2倍,内存占用减少75%,大幅提高爬虫效率。
通过代理IP、请求头伪装和设备模拟等技术,有效应对网站的反爬虫机制。
轻松处理JavaScript渲染的内容,包括无限滚动、表单提交和用户交互等复杂场景。
注:国内用户可设置环境变量跳过Chromium下载,提高安装速度。
推荐结合腾讯云CVM服务器使用
启动速度提升2倍
内存占用减少75%
遵守
复杂场景推荐使用专业爬虫API(如Oxylabs)
可视化调试时设置
Puppeteer无头浏览器爬虫教程
性能优势
反爬应对
动态内容处理
一、环境准备
1. 安装Node.js(需8+版本)
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash
sudo apt-get install -y nodejs
2. 安装Puppeteer
npm install puppeteer
二、基础爬取流程
const puppeteer = require('puppeteer');
(async () => {
// 启动浏览器(默认无头模式)
const browser = await puppeteer.launch({
headless: true, // false可启动可视化浏览器
args: ['--no-sandbox']
});
const page = await browser.newPage();
// 导航到目标页(等待网络空闲)
await page.goto('https://example.com', {
waitUntil: 'networkidle0'
});
// 执行页面内JS获取数据
const data = await page.evaluate(() => {
return document.querySelector('h1').innerText;
});
console.log(data);
await browser.close();
})();
关键点说明:
三、处理动态内容
1. 等待元素加载
await page.waitForSelector('.results', { timeout: 5000 });
2. 滚动加载更多
await page.evaluate(() => {
window.scrollBy(0, window.innerHeight);
});
3. 点击交互元素
await page.click('button.load-more');
四、反爬虫对策
1. 代理IP配置
await puppeteer.launch({
args: ['--proxy-server=http://user:pass@proxy_ip:port']
});
2. 请求头伪装
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0...)');
3. 设备模拟
await page.emulate(puppeteer.devices['iPhone 11']);
五、高级功能
1. 拦截网络请求
await page.setRequestInterception(true);
page.on('request', req => {
if(req.resourceType() === 'image')
req.abort();
else
req.continue();
});
2. 响应头捕获
const response = await page.waitForResponse(res => res.status() === 200);
console.log(response.headers());
3. PDF/截图生成
await page.pdf({ path: 'page.pdf' });
await page.screenshot({ path: 'screenshot.png' });
六、性能优化
1. 无头模式优势
2. 并发控制
const promises = urls.map(url => processPage(url));
await Promise.all(promises);
3. 缓存复用
const browser = await puppeteer.launch({
userDataDir: './user_data'
});
七、注意事项
robots.txt
协议,设置合理请求间隔headless: false
及devtools: true
教程资源
Puppeteer无头浏览器爬虫教程
作者:zvvq博客网
免责声明:本文来源于网络,如有侵权请联系我们!