使用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();
小结:
由于篇幅所限,本文就简单的介绍到这里。具体进一步使用方法待下一篇文章中继续介绍。感兴趣的朋友可以看看这两篇文章。(实际是同一篇文章,中文的那个是译文)
- https://github.com/emadehsan/thal。
- http://csbun.github.io/blog/2017/09/puppeteer/
另外,虽然有Puppeteer珠玉在前,也还是有Chromeless这样1w多start的受欢迎的第三方社区版本出现,感兴趣的朋友可以了解一下。
转载于:https://www.cnblogs.com/TianFang/p/9027187.html
使用Puppeteer进行数据抓取(一)——安装和使用相关推荐
- 干货!链家二手房数据抓取及内容解析要点
"本文对链家官网网页进行内容分析,可以作为一般HTTP类应用协议进行协议分析的参考,同时,对链家官网的结构了解后,可以对二手房相关信息进行爬取,并且获取被隐藏的近期成交信息." 另 ...
- vba抓取网页数据到excel_R语言网页数据抓取XML数据包
有些网络上的数据无法复制粘贴,一个一个录入有点费时费力,此时用这种数据抓取方法,短短几句,简单实用.XML是一种可扩展标记语言,它被设计用来传输和存储数据.XML是各种应用程序之间进行数据传输的最常用 ...
- 10-穿墙代理的设置 | 01.数据抓取 | Python
10-穿墙代理的设置 郑昀 201005 隶属于<01.数据抓取>小节 我们访问 Twitter 等被封掉的网站时,需要设置 Proxy . 1.使用HTTP Proxy 下面是普通HTT ...
- b站视频详情数据抓取,自动打包并发送到指定邮箱(单个或者群发)
BiLiBiLi Time: 2020年11月6日19:44:58 Author: Yblackd BiLiBiLi BiLiBiLi 介绍 软件架构 安装教程 使用说明 源码下载 BiLiBiLi ...
- [Python爬虫] 三、数据抓取之Requests HTTP 库
往期内容提要: [Python爬虫] 一.爬虫原理之HTTP和HTTPS的请求与响应 [Python爬虫] 二.爬虫原理之定义.分类.流程与编码格式 一.urllib 模块 所谓网页抓取,就是把URL ...
- 基于Python爬虫的股票成交量数据抓取分析系统
目录 数据获取 2 1.1. 实验环境搭建 2 1.2. 抓取数据 2 1.2.1. 新浪财经 3 1.2.2. 网易财经 6 1.2.3. 东方财富 12 1.2.4. TuShare (挖地兔) ...
- 「docker实战篇」python的docker-打造多任务端app应用数据抓取系统(下)(35)
上次已经把python文件挂载到虚拟机上了,这次主要设置下虚拟机通过docker容器的方式. 运行 python 代码运行 >启动一个crt的会话 docker run -it -v /root ...
- Python爬虫入门实战之猫眼电影数据抓取(理论篇)
前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...
- 查询数据 抓取 网站数据_有了数据,我就学会了如何在几个小时内抓取网站,您也可以...
查询数据 抓取 网站数据 I had a shameful secret. It is one that affects a surprising number of people in the da ...
最新文章
- 导入torchvision出现:AttributeError: module ‘torch.jit‘ has no attribute ‘unused‘错误
- wxWidgets:事件和事件处理
- android EventBus的简单使用
- Linux下的USB总线驱动(04)——USB键盘驱动 usbkbd.c
- SqlServer自定义聚合函数
- esxi虚机启动慢的问题
- 关于Tomcat的部署
- 安装 pear、phpunit 测试用例步骤方法
- 2016HUAS暑假集训训练题 F - 简单计算器
- Php开发银行接口之浦发银行
- imageJ打不开mp4怎么办?
- 微信小程序开发入门(API)
- 【日记本砸】21.02.01-12 过程只是过程,目的才是目的。
- 痘痘告诉你,身体哪里生病了
- 如何制作简单的日历html5,js+html制作简单日历的方法
- 基于Foolnltk的《三体》文本命名实体分析
- Git将分支代码合并到主干/将主干代码合并到分支
- Excel数据筛选匹配
- Linux命令行窗口无法输入密码
- Android 8.1 【FriendlyARM】温度压力传感器-BMP180 驱动开发
热门文章
- 用MATLAB函数绘制系统的,用matlab绘制odes系统定义的函数
- linux命令wget多个参数,wget 命令参数使用方法
- Hot Door CADtools (基础篇)
- PAT_B_1054_Java(20分)
- 信息竞赛进阶指南--中缀表达式转后缀表达式并求值(模板)
- 位域 bit-fields C的重要数据结构
- bert 无标记文本 调优_使用BERT准确标记主观问答内容
- 缺失值的处理——R语言
- 银行错误将10万打给自己,客户有责任退还,银行难道没责任吗?
- 支付宝个人账单出来了,这里有最全的查看攻略!