Puppeteer爬虫实战(一)

538次阅读次阅读
没有评论

Puppeteer 爬虫技术实践

信息简介

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

技术细节

为什么提到它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. 初始化
<code>npm init</code>
Puppeteer爬虫实战(一)

.安装Puppeteer

<code>npm install puppeteer --save</code>

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

Puppeteer爬虫实战(一)

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

Puppeteer爬虫实战(一)

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

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

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

Puppeteer爬虫实战(一)

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

老三的古代
版权声明:本站原创文章,由老三的古代2021-01-30发表,共计4774字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
载入中...