zoukankan      html  css  js  c++  java
  • 使用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({
            headlessfalse,
            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({
        headlessfalse,
        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)"]}GoogleChromeApplicationchrome.exe`;
    const user_data_path = String.raw`${process.env.LocalAppData}GoogleChromeUser DataDefault`;
    async function run() {
        const browser = await puppeteer.launch({
            headlessfalse,
            userDataDiruser_data_path,
            executablePathchrome_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的受欢迎的第三方社区版本出现,感兴趣的朋友可以了解一下。

  • 相关阅读:
    白色情人节为你身边的程序猿献上一份礼物!
    《大话操作系统——做坚实的project实践派》(3)
    hdu 1085 Holding Bin-Laden Captive!(母函数)
    LeetCode228:Summary Ranges
    android adb端口被占用解决方法
    TortoiseSVN比较工具设置为BeyondCompare 4
    Kotlin Android学习入门
    Android Studio中 ADB WIFI插件进行无线调试实践
    如何离线安装chrome插件
    Androoid studio 2.3 AAPT err(Facade for 596378712): \?C:Users中文文件夹.androiduild-cache
  • 原文地址:https://www.cnblogs.com/TianFang/p/9027187.html
Copyright © 2011-2022 走看看