Puppeteer爬蟲實戰(一)


Puppeteer 爬蟲技術實踐

信息簡介

Puppeteer是Chrome開發團隊發布的一個通過Chrome DevTool Protocol來控制瀏覽器Chrome(下文若無顯式稱呼Chromium,瀏覽器都同指Chromium吧,至於Chrome、Chromium的區別大家自行搜索吧)的一組基於NodeJS的API包,即通過Puppeteer提供的方法可以達到控制Chrome的目的。

技術細節

為什么提到它Puppeteer

因為它提供的API能方便地控制瀏覽器,控制瀏覽器能干什么?最直接的就是UI自動化測試、實現爬蟲應用、網站截屏、生成網站PDF等。其實真正起到控制瀏覽器的是Chrome DevTool Protocol,而基於此也有很多其它語言實現的API包,大家可自行到github搜索查看。本人選擇Nodejs主要還是官方維護,方便同步升級不用擔心被遺忘(本人的糊口語言是C#,一個大部分被同行看不起和技術廠商遺忘SDK的語言🤣)。

使用簡介

Puppeteer 主要提供兩種方式:Headless 、FullHead,我自己簡單的理解為“無界面”和“有界面”,其實主要是二者在請求頭部和渲染方式上區別(比如被網站檢測到頭部信息、以及渲染環境)。為什么強調這兩種方式,因為這涉及到你的爬蟲被網站監測到能力,目前Headless很簡單就可以使用,但是FullHead模式就有難點,因為FullHead模式要打開瀏覽器界面,那么當你將爬蟲應用部署到Docker環境下時你就要模擬這個界面,這個就太難了,大概google了半天才找到使用xvfb模擬界面解決了。當你實現了FullHead模式那么你的爬蟲應用生存幾率就又大了1%。

快速使用

因為我使用的nodejs版本,故測試demo者請自行安裝Nodejs環境。

  1. 初始化
  1. npm init

     


2.安裝Puppeteer

 

  1. npm install puppeteer --save

安裝時因為GF的原因,會下載很緩慢,可以通過配置環境變量解決(下文也會告訴大家使用已經裝好的瀏覽器)
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD :配置為true跳過下載
PUPPETEER_EXECUTABLE_PATH: 瀏覽器執行文件路徑,切記是執行文件不同系統文件名皆不同

 由於平常都在使用Docker,為了熟悉Linux命令所以我這里用的bash命令,windows下自己修改環境命令


圖中看到已經跳過安裝
下面寫一段屏幕截圖的腳本

 

const puppeteer = require('puppeteer');

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

  await browser.close();
})();

上面的腳本意思是啟動一個HeadLess模式瀏覽器,然后打開博客園並進行截屏保存。

上圖已經看到博客園的截屏,但是貌似有點和我們平常看到的不太一樣,下一篇文章我將詳細介紹如何更精細的使用puppeteer控制瀏覽器而更像我們平常使用的瀏覽器瀏覽網站。

我的風擺月弄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM