具体使用请参看Puppeteer官网
puppeteer爬虫和一般爬虫的区别
爬虫是一个模拟人类请求网站行为的程序。很多爬虫程序是通过请求http获取数据,用puppeteer做爬虫是通过DevTool协议控制Chrome或Chromium来抓取页面信息
puppeteer下载
两种模式
1.完整模式(自动下载最新版的Chrome)
npm i puppeteer
...
const puppeteer = require('puppeteer');
2.简洁模式(手动指定Chrome路径)
npm i puppeteer-core
...
const puppeteer = require('puppeteer-core');
puppeteer.launch({
executablePath:Chrome.exe // 指定Chrome或Chromium路径
})
爬取豆瓣电影
直接上代码
const puppeteer = require('puppeteer-core');
const launchConfig = {
headless: false,
executablePath: 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
slowMo: 1000,
defaultViewport: {
width: 1600,
height: 900,
}
}
puppeteer.launch(launchConfig).then(async browser => {
const page = await browser.newPage();
await page.goto('https://movie.douban.com/cinema/nowplaying/beijing/');
const result = await page.evaluate(() => {
const items = document.querySelectorAll('#nowplaying > div.mod-bd > ul >li');
const links = [];
if (items.length >= 1) {
items.forEach((item) => {
const data = Array.from(item.attributes);
const link = {};
data.forEach((v) => {
link[v.nodeName] = v.value;
});
const a = item.querySelector('.poster > a');
const img = a.querySelector('img');
link.href = a.getAttribute('href');
link.src = img.getAttribute('src');
links.push({
...link,
});
});
}
return links;
});
console.log('result', result)
await browser.close();
});
效果图
关于page.evaluate()API
为什么在page.evaluate()函数中就可以使用原生DOM操作呢?
Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。
page.evaluate()相当于通过DevTools协议调用了浏览器的控制台,将它的回调全部拿到了控制台中执行,在浏览器的控制台中我们是可以用原生操作来控制页面的。
我们把上文page.evaluate()中的回调拿到控制台中执行,拿到的数据和上文的一模一样
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。