puppeteer 爬虫
2018-05-19 本文已影响0人
ape_caesar
通过操纵谷歌chrome浏览器(或chromium)的谷歌官方api——puppeteer来实现爬虫
首先看一下puppeteer(译:提线木偶)的定义:
Puppeteer is a Node library which provides a high-level API to control headless Chrome or Chromium over the DevTools Protocol. It can also be configured to use full (non-headless) Chrome or Chromium.
总的来说就是操作谷歌浏览器的高级api;headless就是打开一个不需要图像显示的浏览器,像是后台运行一般,这样做前端测试或者爬虫就很方便,这个从chrome59代开始出现的。
需要安装的环境
- puppeteer是在node.js上运行的,所以首先需要安装node.js
安装nodejs非常简单,这里就不多说了。(提一下有nvm工具是nodejs的版本控制工具,也算是比较方便) - 在你安装完node.js后,node.js带有的npm包管理工具,你就可以通过如下命令安装puppeteer; npm init初始化项目这个也不必多说(可以多说的是阿里云镜像的cnpm可以在下载这些各种包的时候可以更快点,百度cnpm你就知道了)
安装puppeteer过程中他会帮你安装自带的chromium,这个可能还下不了,网络原因还有翻墙什么的,所以我们跳过这个chromium的安装
set PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1
然后再
npm install puppeteer --save
或者直接使用如下命令也行
npm i --save puppeteer --ignore-scripts
- 既然我们跳过了chromium的下载,那我们自然要自己提供一个chromium(chrome也行)
如果你电脑上有谷歌浏览器,你就直接用它就行:
打开你的谷歌浏览器,在网址栏输入: chrome://version/
显示的内容
从中你就能看到你的浏览器的执行路径,待会使用puppeteer的时候你会用得上。
或者你想下一个chromium(像是谷歌浏览器的测试版),我在知乎上看到一个人做了很多版本的chromium的下载,大好人,地址是http://Chromedownloads.net
好的,现在你需要的环境都搞定了。开始爬吧!
最简单的一个Demo
这里我们直接拿puppeteer文档的简单例子来看:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
executablePath:'E://nodeJs/Google/Chrome/Application/chrome.exe',
//headless: true,
devtools :true
});
const page = await browser.newPage();
await page.goto('https://baiducom');
await page.screenshot({path: 'example.png'});
await browser.close();
})();
- 这里首先看到它通过launch方法,拿到一个browser实例,等同于你打开了你的谷歌浏览器,这里的executablePath就写你的谷歌浏览器的执行路径即可,我把他放e盘了;headless就是使用headless的方式打开浏览器;
- devtools就是能看到浏览器的执行过程,在测试阶段我们需要“眼睁睁”的看浏览器执行了哪些动作,所以把他打开。
- 然后浏览器newPage拿到一个网页,一个还没有输入网址的网页,你再通过goto方法,让他去往一个网站,然后调用screenshot方法截屏。最后关闭浏览器。可以看到这些方法都是异步的,所以都加上了await, 可以看到puppeteer对于async await的完美支持。