使用Chrome快速實現數據的抓取(五)—— puppeteer

若是要以自動化的方式驅動Chrome進行數據抓取,必須實現Chrome Dev Protocol協議的客戶端。這個協議自己並不複雜,我在以前的文章中也簡單的介紹過一下。html

Google自己有一個Node的實現chrome-remote-interface,對於其它語言,github上也有很多的實現,我也實現過一個,仍是很是簡單的。不過雖然實現這個協議很是簡單,但原始的DevProtocol中是很是底層的API,要使用這些API實現數據抓取仍是要進行許多的封裝工做的。git

爲了更加簡單的使用Headless Chrome,Google Chrome團隊官方提供了另外一個高等級API版本的Node js庫puppeteer。相比底層API,這個要好用得多了。一個簡單的示例以下:github

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/thalweb

經過puppeteer,咱們能夠完成大部分web自動化的功能。不過,和底層的DevProtocol接口比起來,仍是有一些功能缺失的。例如,對於某個頁面,要想獲取到其全部的http請求和響應數據就沒法實現,而這些經過DevProtocol仍是很容易實現的。雖然puppeteer的定位是高層api,若是能同時開放底層接口的話就更加好了。chrome

相關文章
相關標籤/搜索