1. 程式人生 > >使用Chrome快速實現數據的抓取(五)—— puppeteer

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

ref google rem 官方 簡單的 code web 驅動 ace

如果要以自動化的方式驅動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