使用Chrome快速实现数据的抓取—— puppeteer

Posted TianFang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Chrome快速实现数据的抓取—— puppeteer相关的知识,希望对你有一定的参考价值。

如果要以自动化的方式驱动Chrome进行数据抓取,必须实现Chrome Dev Protocol协议的客户端。这个协议本身并不复杂,我在之前的文章中也简单的介绍过一下。

Google本身有一个Node的实现chrome-remote-interface,对于其它语言,github上也有不少的实现,我也实现过一个,还是非常简单的。不过虽然实现这个协议非常简单,但原始的DevProtocol中是非常底层的API,要使用这些API实现数据抓取还是要进行许多的封装工作的。

为了更加简单的使用Headless Chrome,Google Chrome团队官方提供了另一个高等级API版本的Node js库puppeteer。相比底层API,这个要好用得多了。一个简单的示例如下:

const puppeteer = require(\'puppeteer\'); 

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(\'https://example.com\');
  await page.screenshot({path: \'example.png\'});
  await browser.close();
})();

 这个库非常好用,有空的话后续我还会写一系列文章来介绍它。对它感兴趣的朋友可以先看看这篇文章:https://github.com/emadehsan/thal

通过puppeteer,我们可以完成大部分web自动化的功能。不过,和底层的DevProtocol接口比起来,还是有一些功能缺失的。例如,对于某个页面,要想获取到其所有的http请求和响应数据就无法实现,而这些通过DevProtocol还是很容易实现的。虽然puppeteer的定位是高层api,如果能同时开放底层接口的话就更加好了。

 

以上是关于使用Chrome快速实现数据的抓取—— puppeteer的主要内容,如果未能解决你的问题,请参考以下文章

使用Chrome快速实现数据的抓取——优点

使用Chrome快速实现数据的抓取

使用Chrome快速实现数据的抓取

编写一个爬虫类库——准备

Java 实现 HttpClients+jsoup,Jsoup,htmlunit,Headless Chrome 爬虫抓取数据

爬虫应用示例--puppeteer数据抓取的实现方法(续1)