使用Puppeteer進行數據抓取(一)——安裝和使用


Puppeteer 是 Google Chrome 團隊官方的Chrome 自動化工具。它本身是基於Chrome Dev Protocol協議實現的,但它提供了更高層次API封裝,使用起來更加方便快捷。加上google這個大咖加官方的背景,更使得其地位更是提升了不少。

我之前在文章使用Chrome快速實現數據的抓取(五)—— puppeteer中簡單的介紹過一下它,之前准備寫一系列文章來詳細介紹下它的,但由於種種原因一直耽擱了,這篇文章其實在電腦里已經存了不少時間了,今天抽空整理了下,將其發表出來。

 

安裝NodeJS

Puppeteer是一個NodeJS的開發包,因此需要安裝Node環境的,它本身依賴的最低版本是Node v6.4。但由於里面的大量異步調用,因此最好使用支持async/await的 v7.6或更高版本。

關於NodeJS的安裝這里就不介紹了,我這里使用的是windows環境,基本上是一路next就好了。

 

安裝puppeteer

建立Node工程后,首先需要引入puppeteer包,使用npm命令即可:

    npm install puppeteer

但這兒有一個需要注意的地方是,這個包會下載一個Chromium,由於網絡原因,這個過程是非常慢的,並且也會造成重復下載,每個工程都要下載一個,費時費力。

這個問題的解決方法是,安裝時添加--ignore-scripts命令跳過Chromium的下載,

    npm install puppeteer --ignore-scripts

然后指定我們安裝的Chrome或Chromium啟動。具體方法后面再介紹

 

示例:

首先還是來一個簡單的示例。

const puppeteer = require('puppeteer');

async function run () {
    const browser = await puppeteer.launch({
        headlessfalse,
        executablePath"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
    });
    const page = await browser.newPage();
    await page.goto('https://tianfang.cnblogs.com');
    await page.screenshot({ path'screen.png' });
    await browser.close();
};

run();

代碼很簡單,運行后就會啟動一個chrome,然后訪問我的博客,並且截圖保存。

 

啟動參數:

首先我們來看前面代碼的啟動參數:

const browser = await puppeteer.launch({
    headlessfalse,
    executablePath"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
});

這里我設置了兩個參數:

  1. 是否開啟界面: headless

如果把它設為true的話,則不顯示界面,理論上也有更好的性能。這里將其設置為false,主要是為了調試方便。

  1. Chrome路徑: executablePath

因為我安裝的時候跳過了Chromium的下載,因此這里顯式指定了chrome的路徑。

在日常使用中,往往還有些其它參數要設置的。

  1. 用戶數據路徑: userDataDir

用戶數據路徑,這樣chrome可以使用你的一些設置和緩存

注意: 如果用戶數據路徑中包含中文,記得將js保存為utf8格式,以免不認識

  1. 其它參數: args

默認情況下,chrome是不加載擴展的,可以在args中啟用擴展

args: [
    `--disable-extensions-except=${ext}`,
    `--load-extension=${ext}`
]

 

設置瀏覽器大小:

默認瀏覽器大小是1024*768,可以通過page.setViewport設置其大小。

page.setViewport({ width: 1024, height: 768 }); 

 

有了上面基礎后,前面代碼就改為如下所示了:

const puppeteer = require('puppeteer');

const chrome_exe = String.raw`${process.env["ProgramFiles(x86)"]}\Google\Chrome\Application\chrome.exe`;
const user_data_path = String.raw`${process.env.LocalAppData}\Google\Chrome\User Data\Default`;
async function run() {
    const browser = await puppeteer.launch({
        headlessfalse,
        userDataDiruser_data_path,
        executablePathchrome_exe
    });
    const page = await browser.newPage();
    page.setViewport({ width: 1600, height: 800 });
    await page.goto('https://tianfang.cnblogs.com');
    await page.screenshot({ path'screen.png' });
    await browser.close();
};

run();

 

小結:

由於篇幅所限,本文就簡單的介紹到這里。具體進一步使用方法待下一篇文章中繼續介紹。感興趣的朋友可以看看這兩篇文章。(實際是同一篇文章,中文的那個是譯文)

  1. https://github.com/emadehsan/thal
  2. http://csbun.github.io/blog/2017/09/puppeteer/

另外,雖然有Puppeteer珠玉在前,也還是有Chromeless這樣1w多start的受歡迎的第三方社區版本出現,感興趣的朋友可以了解一下。

 


免責聲明!

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



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