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"}); 

这里我设置了两个参数:

  1. 是否开启界面: headless

如果把它设为true的话,则不显示界面,理论上也有更好的性能。这里将其设置为false,主要是为了调试方便。

  1. Chrome路径: executablePath

因为我安装的时候跳过了Chromium的下载,因此这里显式指定了chrome的路径。

在日常使用中,往往还有些其它参数要设置的。

  1. 用户数据路径: userDataDir

用户数据路径,这样chrome可以使用你的一些设置和缓存

注意: 如果用户数据路径中包含中文,记得将js保存为utf8格式,以免不认识

  1. 其它参数: 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(); 

小结:

由于篇幅所限,本文就简单的介绍到这里。具体进一步使用方法待下一篇文章中继续介绍。感兴趣的朋友可以看看这两篇文章。(实际是同一篇文章,中文的那个是译文)

  1. https://github.com/emadehsan/thal。
  2. http://csbun.github.io/blog/2017/09/puppeteer/

另外,虽然有Puppeteer珠玉在前,也还是有Chromeless这样1w多start的受欢迎的第三方社区版本出现,感兴趣的朋友可以了解一下。

转载于:https://www.cnblogs.com/TianFang/p/9027187.html

使用Puppeteer进行数据抓取(一)——安装和使用相关推荐

  1. 干货!链家二手房数据抓取及内容解析要点

    "本文对链家官网网页进行内容分析,可以作为一般HTTP类应用协议进行协议分析的参考,同时,对链家官网的结构了解后,可以对二手房相关信息进行爬取,并且获取被隐藏的近期成交信息." 另 ...

  2. vba抓取网页数据到excel_R语言网页数据抓取XML数据包

    有些网络上的数据无法复制粘贴,一个一个录入有点费时费力,此时用这种数据抓取方法,短短几句,简单实用.XML是一种可扩展标记语言,它被设计用来传输和存储数据.XML是各种应用程序之间进行数据传输的最常用 ...

  3. 10-穿墙代理的设置 | 01.数据抓取 | Python

    10-穿墙代理的设置 郑昀 201005 隶属于<01.数据抓取>小节 我们访问 Twitter 等被封掉的网站时,需要设置 Proxy . 1.使用HTTP Proxy 下面是普通HTT ...

  4. b站视频详情数据抓取,自动打包并发送到指定邮箱(单个或者群发)

    BiLiBiLi Time: 2020年11月6日19:44:58 Author: Yblackd BiLiBiLi BiLiBiLi 介绍 软件架构 安装教程 使用说明 源码下载 BiLiBiLi ...

  5. [Python爬虫] 三、数据抓取之Requests HTTP 库

    往期内容提要: [Python爬虫] 一.爬虫原理之HTTP和HTTPS的请求与响应 [Python爬虫] 二.爬虫原理之定义.分类.流程与编码格式 一.urllib 模块 所谓网页抓取,就是把URL ...

  6. 基于Python爬虫的股票成交量数据抓取分析系统

    目录 数据获取 2 1.1. 实验环境搭建 2 1.2. 抓取数据 2 1.2.1. 新浪财经 3 1.2.2. 网易财经 6 1.2.3. 东方财富 12 1.2.4. TuShare (挖地兔) ...

  7. 「docker实战篇」python的docker-打造多任务端app应用数据抓取系统(下)(35)

    上次已经把python文件挂载到虚拟机上了,这次主要设置下虚拟机通过docker容器的方式. 运行 python 代码运行 >启动一个crt的会话 docker run -it -v /root ...

  8. Python爬虫入门实战之猫眼电影数据抓取(理论篇)

    前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...

  9. 查询数据 抓取 网站数据_有了数据,我就学会了如何在几个小时内抓取网站,您也可以...

    查询数据 抓取 网站数据 I had a shameful secret. It is one that affects a surprising number of people in the da ...

最新文章

  1. 导入torchvision出现:AttributeError: module ‘torch.jit‘ has no attribute ‘unused‘错误
  2. wxWidgets:事件和事件处理
  3. android EventBus的简单使用
  4. Linux下的USB总线驱动(04)——USB键盘驱动 usbkbd.c
  5. SqlServer自定义聚合函数
  6. esxi虚机启动慢的问题
  7. 关于Tomcat的部署
  8. 安装 pear、phpunit 测试用例步骤方法
  9. 2016HUAS暑假集训训练题 F - 简单计算器
  10. Php开发银行接口之浦发银行
  11. imageJ打不开mp4怎么办?
  12. 微信小程序开发入门(API)
  13. 【日记本砸】21.02.01-12 过程只是过程,目的才是目的。
  14. 痘痘告诉你,身体哪里生病了
  15. 如何制作简单的日历html5,js+html制作简单日历的方法
  16. 基于Foolnltk的《三体》文本命名实体分析
  17. Git将分支代码合并到主干/将主干代码合并到分支
  18. Excel数据筛选匹配
  19. Linux命令行窗口无法输入密码
  20. Android 8.1 【FriendlyARM】温度压力传感器-BMP180 驱动开发

热门文章

  1. 用MATLAB函数绘制系统的,用matlab绘制odes系统定义的函数
  2. linux命令wget多个参数,wget 命令参数使用方法
  3. Hot Door CADtools (基础篇)
  4. PAT_B_1054_Java(20分)
  5. 信息竞赛进阶指南--中缀表达式转后缀表达式并求值(模板)
  6. 位域 bit-fields C的重要数据结构
  7. bert 无标记文本 调优_使用BERT准确标记主观问答内容
  8. 缺失值的处理——R语言
  9. 银行错误将10万打给自己,客户有责任退还,银行难道没责任吗?
  10. 支付宝个人账单出来了,这里有最全的查看攻略!