使用Chrome快速實現數據的抓取(五)—— puppeteer
阿新 • • 發佈:2017-10-05
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