使用Puppeteer进行数据抓取(一)——安装和使用
Puppeteer是 Google Chrome 团队官方的Chrome 自动化工具。它本身是基于Chrome Dev Protocol协议实现的,但它提供了更高层次API封装,使用起来更加方便快捷。加上google这个大咖加官方的背景,更使得其地位更是提升了不少。
我之前在文章使用Chrome快速实现数据的抓取(五)—— puppeteer中简单的介绍过一下它,之前准备写一系列文章来详细介绍下它的,但由于种种原因一直耽搁了,这篇文章其实在电脑里已经存了不少时间了,今天抽空整理了下,将其发表出来。
安装NodeJS
Puppeteer是一个NodeJS的开发包,因此需要安装Node环境的,它本身依赖的最低版本是Node v6.4。但由于里面的大量异步调用,因此最好使用支持async/await的 v7.6或更高版本。
关于NodeJS的安装这里就不介绍了,我这里使用的是windows环境,基本上是一路next就好了。
安装puppeteer
建立Node工程后,首先需要引入puppeteer包,使用npm命令即可:
npm install puppeteer
但这儿有一个需要注意的地方是,这个包会下载一个Chromium,由于网络原因,这个过程是非常慢的,并且也会造成重复下载,每个工程都要下载一个,费时费力。
这个问题的解决方法是,安装时添加--ignore-scripts命令跳过Chromium的下载,
npm install puppeteer --ignore-scripts
然后指定我们安装的Chrome或Chromium启动。具体方法后面再介绍
示例:
首先还是来一个简单的示例。
const puppeteer = require('puppeteer');
async function run () {
const browser = await puppeteer.launch({
headless: false,
executablePath: "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
});
const page = await browser.newPage();
await page.goto('https://tianfang.cnblogs.com');
await page.screenshot({ path: 'screen.png' });
await browser.close();
};
run();
代码很简单,运行后就会启动一个chrome,然后访问我的博客,并且截图保存。
启动参数:
首先我们来看前面代码的启动参数:
const browser = await puppeteer.launch({
headless: false,
executablePath: "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
});
这里我设置了两个参数:
- 是否开启界面: headless
如果把它设为true的话,则不显示界面,理论上也有更好的性能。这里将其设置为false,主要是为了调试方便。
- Chrome路径: executablePath
因为我安装的时候跳过了Chromium的下载,因此这里显式指定了chrome的路径。
在日常使用中,往往还有些其它参数要设置的。
- 用户数据路径: userDataDir
用户数据路径,这样chrome可以使用你的一些设置和缓存
注意: 如果用户数据路径中包含中文,记得将js保存为utf8格式,以免不认识
- 其它参数: args
默认情况下,chrome是不加载扩展的,可以在args中启用扩展
args: [
`--disable-extensions-except=${ext}`,
`--load-extension=${ext}`
]
设置浏览器大小:
默认浏览器大小是1024*768,可以通过page.setViewport设置其大小。
page.setViewport({ width: 1024, height: 768 });
有了上面基础后,前面代码就改为如下所示了:
const puppeteer = require('puppeteer');
const chrome_exe = String.raw`${process.env["ProgramFiles(x86)"]}\Google\Chrome\Application\chrome.exe`;
const user_data_path = String.raw`${process.env.LocalAppData}\Google\Chrome\User Data\Default`;
async function run() {
const browser = await puppeteer.launch({
headless: false,
userDataDir: user_data_path,
executablePath: chrome_exe
});
const page = await browser.newPage();
page.setViewport({ width: 1600, height: 800 });
await page.goto('https://tianfang.cnblogs.com');
await page.screenshot({ path: 'screen.png' });
await browser.close();
};
run();
小结:
由于篇幅所限,本文就简单的介绍到这里。具体进一步使用方法待下一篇文章中继续介绍。感兴趣的朋友可以看看这两篇文章。(实际是同一篇文章,中文的那个是译文)
另外,虽然有Puppeteer珠玉在前,也还是有Chromeless这样1w多start的受欢迎的第三方社区版本出现,感兴趣的朋友可以了解一下。
使用Puppeteer进行数据抓取(一)——安装和使用的更多相关文章
- 使用Puppeteer进行数据抓取(四)——快速调试
在我们使用chrome作为爬虫获取网页数据时,往往需如下几步. 打开chrome 导航至目标页面 等待目标页面加载完成 解析目标页面数据 保存目标页面数据 关闭chrome 我们实际的编码往往集中在第 ...
- 使用Puppeteer进行数据抓取(四)——图片下载
大多数情况下,图片获取并不是很困难的事情,获取图片的url,然后模拟浏览器请求即可.但是,有的时候这种方法往往无法生效,常见的情形有: 动态图片,每次获取都是一个新的,例如图片验证码,重新获取时是一个 ...
- 使用Puppeteer进行数据抓取(三)——简单的示例
本文以一个示例简单的介绍一下puppeteer的用法,我们的目的是:获取我博客上的文章的前十页的所有随笔的标题和链接.由于puppeteer本身是自动化chorme,因此这里我们的步骤和手动操作浏览器 ...
- 使用Puppeteer进行数据抓取(二)——Page对象
page对象是puppeteer最常用的对象,它可以认为是chrome的一个tab页,主要的页面操作都是通过它进行的.Google的官方文档详细介绍了page对象的使用,这里我只是简单的小结一下. 客 ...
- 【Python入门只需20分钟】从安装到数据抓取、存储原来这么简单
基于大众对Python的大肆吹捧和赞赏,作为一名Java从业人员,我本着批判与好奇的心态买了本python方面的书<毫无障碍学Python>.仅仅看了书前面一小部分的我......决定做一 ...
- 数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置
数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置 2013-05-15 15:08:14 分类: Python/Ruby 数据抓取是一门艺术,和其他软件不同,世界上 ...
- python爬虫数据抓取方法汇总
概要:利用python进行web数据抓取方法和实现. 1.python进行网页数据抓取有两种方式:一种是直接依据url链接来拼接使用get方法得到内容,一种是构建post请求改变对应参数来获得web返 ...
- [nodejs,expressjs,angularjs2] LOL英雄列表数据抓取及查询显示应用
新手练习,尝试使用angularjs2 [angularjs2 数据绑定,监听数据变化自动修改相应dom值,非常方便好用,但与传统js(jquery)的使用方法会很不同,Dom操作也不太习惯] 应用效 ...
- Python数据抓取_BeautifulSoup模块的使用
在数据抓取的过程中,我们往往都需要对数据进行处理 本篇文章我们主要来介绍python的HTML和XML的分析库 BeautifulSoup 的官方文档网站如下 https://www.crummy.c ...
随机推荐
- centos6.8安装mysql5.6【转】
首先先要去看看本机有没有默认的mysql, 本地默认有的,我们应先卸载,在安装新的这个逻辑. rpm -qa | grep mysql 我本机默认安装的mysql5.1.73 下一步删除 rpm -e ...
- [转]mitmproxy套件使用攻略及定制化开发
mitmproxy是一款支持HTTP(S)的中间人代理工具.不同于Fiddler2,burpsuite等类似功能工具,mitmproxy可在终端下运行.mitmproxy使用Python开发,是辅助w ...
- C# XML 文档注释
原文链接:http://www.shinater.com/DocsBuilder/help.html <summary>description</summary> 描述类型或类 ...
- XShell 使用方法
XShell是一款Windows下非常优秀的远程连接Linux主机的工具,是平常使用不可缺少的工具.复制和粘贴由于在linux的Shell下,Ctrl+c是中断当前指令,这个快捷键和win系统下的复制 ...
- Vue 实现一个中国地图
参考:https://www.cnblogs.com/mazey/p/7965698.html 重点:如何引入中国地图js文件,china.js require('echarts/map/js/chi ...
- angular有关网站
angular官网 https://v2.angular.cn/docs/ts/latest/ angular更新信息https://github.com/angular/angular/blob/m ...
- 织梦任意页面调用{dede:field.content/}的方法
过滤掉所有的html代码,只显示文字,具体的ID自己更改. 代码如下: {dede:sql sql='Select content from dede_arctype where id=1'} [fi ...
- Windows下安装Python requests模块
在使用自己写的或者别人的python小工具时可能会出现类似ImportError: No module named Requests的问题: D:\tool\python\fuzz>Fuzz.p ...
- python学习之算法、自定义模块、系统标准模块(上)
算法.自定义模块.系统标准模块(time .datetime .random .OS .sys .hashlib .json和pickle) 一:算法回顾: 冒泡算法,也叫冒泡排序,其特点如下: 1. ...
- app后端设计-- 数据库分表
当项目上线后,随着用户的增长,有些数据表的规模会以几何级增长,当数据达到一定规模的时候(例如100万条),查询,读取性能就下降得很厉害,这时,我们就要考虑分表. 更新表数据时会导致索引更新,当单表数据 ...