Puppeteer爬虫实战(一)

Puppeteer 爬虫技术实践

信息简介

Puppeteer是Chrome开发团队发布的一个通过Chrome DevTool Protocol来控制浏览器Chrome(下文若无显式称呼Chromium,浏览器都同指Chromium吧,至于Chrome、Chromium的区别大家自行搜索吧)的一组基于NodeJS的API包,即通过Puppeteer提供的方法可以达到控制Chrome的目的。

技术细节

  • Puppeteer Github
  • Chrome DevTool Protoco 地址
  • Puppeteer API 英文 | 中文
  • 当你遇到问题时先到这里看看Troubleshooting

为什么提到它Puppeteer

因为它提供的API能方便地控制浏览器,控制浏览器能干什么?最直接的就是UI自动化测试、实现爬虫应用、网站截屏、生成网站PDF等。其实真正起到控制浏览器的是Chrome DevTool Protocol,而基于此也有很多其它语言实现的API包,大家可自行到github搜索查看。本人选择Nodejs主要还是官方维护,方便同步升级不用担心被遗忘(本人的糊口语言是C#,一个大部分被同行看不起和技术厂商遗忘SDK的语言)。

使用简介

Puppeteer 主要提供两种方式:Headless 、FullHead,我自己简单的理解为“无界面”和“有界面”,其实主要是二者在请求头部和渲染方式上区别(比如被网站检测到头部信息、以及渲染环境)。为什么强调这两种方式,因为这涉及到你的爬虫被网站监测到能力,目前Headless很简单就可以使用,但是FullHead模式就有难点,因为FullHead模式要打开浏览器界面,那么当你将爬虫应用部署到Docker环境下时你就要模拟这个界面,这个就太难了,大概google了半天才找到使用xvfb模拟界面解决了。当你实现了FullHead模式那么你的爬虫应用生存几率就又大了1%。

快速使用

因为我使用的nodejs版本,故测试demo者请自行安装Nodejs环境。

  1. 初始化
  1. npm init

     

Puppeteer爬虫实战(一)_第1张图片


2.安装Puppeteer

 

  1. npm install puppeteer --save

安装时因为GF的原因,会下载很缓慢,可以通过配置环境变量解决(下文也会告诉大家使用已经装好的浏览器)
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD :配置为true跳过下载
PUPPETEER_EXECUTABLE_PATH: 浏览器执行文件路径,切记是执行文件不同系统文件名皆不同

 由于平常都在使用Docker,为了熟悉Linux命令所以我这里用的bash命令,windows下自己修改环境命令

Puppeteer爬虫实战(一)_第2张图片


图中看到已经跳过安装
下面写一段屏幕截图的脚本

 

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.cnblogs.com/');
  await page.screenshot({path: 'cnblogs.png'});

  await browser.close();
})();

上面的脚本意思是启动一个HeadLess模式浏览器,然后打开博客园并进行截屏保存。

Puppeteer爬虫实战(一)_第3张图片

上图已经看到博客园的截屏,但是貌似有点和我们平常看到的不太一样,下一篇文章我将详细介绍如何更精细的使用puppeteer控制浏览器而更像我们平常使用的浏览器浏览网站。

我的风摆月弄

你可能感兴趣的:(Puppeteer爬虫实战(一))