文档章节

使用Puppeteer撸一个爬虫

小草先森
 小草先森
发布于 06/20 23:47
字数 1273
阅读 86
收藏 1

Puppeteer是什么

puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏览器是指没有窗口的浏览器。

Puppeteer能做什么

使用puppeteer我们可以让浏览器帮我们自动完成很多事情,比如创建页面的截图或pdf,自动提交表单,UI测试,键盘测试,创建自动化测试环境等。

安装Puppeteer

通过 npm install puppeteer 或者 yarn add puppeteer来安装

注意事项

因为用到了es7的async/await语法进行异步处理。所以node版本最好是v7.6.0或以上。

爬虫实例

对puppeteer有些简单认识之后,我们来做一个爬虫实例加深对puppeteer的印象!

目标网站

如上图所示,我们这次的爬取目标是豆瓣电影网分类区按时间排序,评分6-10分的电影信息。最终获取到的数据是每部电影的海报图片,电影名称,评分以及它的id。

代码分析

1,页面中引入puppeteer包

2,声明爬取页面的url

3, 声明一个基于promise的定时器,后续代码中将会用到。

创建一个立即执行的async 方法,后续代码全部书写在async方法中。

通过puppeteer.launch()方法创建一个无头浏览器chrome对象browser。

通过browser.newPage()方法创建一个页面对象page。该page对象大家可以理解成我们日常打开浏览器之后新建的一个标签页,在该标签页中访问站点。

使用page.goto()访问我们要爬取的站点,第一个参数为爬取站点的url,第二个参数options具体信息大家可查询puppeteer文档,这里使用的waitUntil: 'networkidle2'参数指:当至少500ms内不超过两个网络请求时判断页面请求完成(请原谅我这蹩脚的翻译)具体请看文档中该部分说明:

这里为了确保浏览器请求结束,我们延迟3s再做后续操作。

 

目标页面中通过点击加载更多按钮进行数据异步获取,这里我们需要通过page对象模拟点击操作来显示两页数据,让我们一次能爬取更多的电影信息。

通过page.waitForSelector()方法等待我们需要的dom元素页面中显示出来。通过审查元素我们可以看到在加载更多按钮上声明了more这一class,所以我们要等待的元素用css选择器表示就是'.more',正如上图中的30行代码所示。

随后我们通过循环来控制我们点击加载更多按钮的次数,这里我们这需要模拟点击一次来获取两页数据,若想获取更多数据,可通过修改循环次数来实现。

循环中使用sleep()定时器是为了确保按钮真正的出现在了页面当中做的延迟操作。随后通过page.click('.more')来模拟加载更多按钮点击。

当页面中显示足够我们需要的数据时,接下来我们要做的就是获取这些数据。puppeteer为我们提供了page.evaluate()方法实现在该page页面中执行一段我们自己定义的脚本功能,其中的回调函数则是我们欲执行的代码。

我们可以思考一下,假若我们可以在一个html中插入一段js脚本去获取html中的数据。我们可以通过js原生或jquery去获取相应的dom元素,然后通过dom元素的属性,文本,或者img的src拿到我们想要的信息。首先我们来判断一下该页面中是否引入了jQuery库,如果已引入,我们则可以通过jQuery去操作dom获取数据。

在控制台打印jQuery对象,查看打印结果

通过返回值可以确定该页面是引入了jquery库的,我们可以大胆使用jquery去操作dom

如上面代码截图,我们先var 一个$ 符号接收页面中的jquery对象,然后通过jquery选择器去获取电影图片,名称,评分所在的dom对象。最后通过遍历这些dom对象将我们需要的数据存放到数组links中,完成我们的爬取工作。

最后我们关闭浏览器对象browser并打印我们爬取的数据,检查我们爬虫代码是否成功爬取到电影信息。

ok,控制台成功打印出了我们爬取的电影信息!

© 著作权归作者所有

共有 人打赏支持
小草先森
粉丝 13
博文 41
码字总数 30035
作品 0
武汉
我常用的puppeteer爬虫api

本文共1451字,阅读时间约4分钟 Puppeteer是Chrome团队出的nodejs库(无头浏览器),其中一个功能是网页抓取(可以作为爬虫使用) 详细介绍请看gayhub,更新周期大约是一个月,本文是基于 v1...

aloha66
05/25
0
0
前端使用puppeteer 爬虫生成《React.js 小书》PDF并合并

1、 是什么? : 官方出品的 库 仓库 官方介绍: 您可以在浏览器中手动执行的大多数操作都可以使用完成! 生成页面的屏幕截图和。 抓取并生成预渲染内容(即“”)。 自动化表单提交,测试,键...

轩辕Rowboat
08/30
0
0
使用Puppeteer轻松爬取网易云音乐、QQ音乐的精品歌单

背景 最近在学习Puppeteer进行自动化操作,另一方面为了防止上班时间被打扰,是时候爬点歌单在上班的时候,用来抵抗外界的干扰了。 地址 项目完整代码地址:github.com/BingKui/WeC… 工具 ...

无聊小码农
07/30
0
0
函数计算中使用 puppeteer.js

puppeteer.js github 地址:https://github.com/GoogleChrome/puppeteer API: https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md 函数计算文档:https://help.aliyun.com......

木香丘
06/12
0
0
puppeteer+mysql—爬虫新方法!抓取新闻&评论so easy!

Puppeteer 是 Google Chrome 团队官方的无界面(Headless)Chrome 工具。正因为这个官方声明,许多业内自动化测试库都已经停止维护,包括 PhantomJS。Selenium IDE for Firefox 项目也因为缺...

圆儿圈圈
09/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Flask 开发填坑

插件的选择: flask-security 真的是个鸡肋啊。自带的页面,好丑。还不如用flask-login来做呢。

pearma
21分钟前
0
0
讲述下 :LVM逻辑卷管理遇到的问题

LVM学习逻辑卷管理创建逻辑卷遇到的问题 1 实验环境 系统 内核 发行版本 CentOS 2.6.32-754.2.1.el6.x86_64 CentOS release 6.10 (Final) 由于是最小化安装没有xfs命令,yum安装如下包支持此...

linuxprobe16
56分钟前
0
0
day95-20180922-英语流利阅读-待学习

Hey Jude 半个世纪传唱不衰的背后故事 毛西 2018-09-22 1.今日导读 2004 年,The Beatles 被《滚石》杂志选为“历史上最伟大的 50 位流行音乐家的第一位”。这四名来自英国利物浦的男孩不仅对...

飞鱼说编程
今天
2
0
OSChina 周六乱弹 —— 放假前期焦虑症晚期

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @andonny :分享Matteo的单曲《Panama》: 《Panama》- Matteo 手机党少年们想听歌,请使劲儿戳(这里) @新垣吉衣OSC :我发现只要去有小朋友...

小小编辑
今天
206
10
wait()被notify()后,接着执行wait()后面的语句

wait()被notify()后,接着执行wait()后面的语句

noteman
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部