使用Puppeteer进行数据抓取(一)——安装和使用
Puppeteer 是 Google Chrome 團隊官方的Chrome 自動化工具。它本身是基于Chrome Dev Protocol協(xié)議實現(xiàn)的,但它提供了更高層次API封裝,使用起來更加方便快捷。加上google這個大咖加官方的背景,更使得其地位更是提升了不少。
我之前在文章使用Chrome快速實現(xiàn)數(shù)據(jù)的抓取(五)—— puppeteer中簡單的介紹過一下它,之前準備寫一系列文章來詳細介紹下它的,但由于種種原因一直耽擱了,這篇文章其實在電腦里已經(jīng)存了不少時間了,今天抽空整理了下,將其發(fā)表出來。
?
安裝NodeJS
Puppeteer是一個NodeJS的開發(fā)包,因此需要安裝Node環(huán)境的,它本身依賴的最低版本是Node v6.4。但由于里面的大量異步調用,因此最好使用支持async/await的 v7.6或更高版本。
關于NodeJS的安裝這里就不介紹了,我這里使用的是windows環(huán)境,基本上是一路next就好了。
?
安裝puppeteer
建立Node工程后,首先需要引入puppeteer包,使用npm命令即可:
????npm install puppeteer
但這兒有一個需要注意的地方是,這個包會下載一個Chromium,由于網(wǎng)絡原因,這個過程是非常慢的,并且也會造成重復下載,每個工程都要下載一個,費時費力。
這個問題的解決方法是,安裝時添加--ignore-scripts命令跳過Chromium的下載,
????npm install puppeteer --ignore-scripts
然后指定我們安裝的Chrome或Chromium啟動。具體方法后面再介紹
?
示例:
首先還是來一個簡單的示例。
const?puppeteer?=?require('puppeteer');async?function?run?()?{
????const?browser?=?await?puppeteer.launch({
????????headless:?false,
????????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,然后訪問我的博客,并且截圖保存。
?
啟動參數(shù):
首先我們來看前面代碼的啟動參數(shù):
const?browser?=?await?puppeteer.launch({????headless:?false,
????executablePath:?"C:\\Program?Files?(x86)\\Google\\Chrome\\Application\\chrome.exe"
});
這里我設置了兩個參數(shù):
如果把它設為true的話,則不顯示界面,理論上也有更好的性能。這里將其設置為false,主要是為了調試方便。
因為我安裝的時候跳過了Chromium的下載,因此這里顯式指定了chrome的路徑。
在日常使用中,往往還有些其它參數(shù)要設置的。
用戶數(shù)據(jù)路徑,這樣chrome可以使用你的一些設置和緩存
注意: 如果用戶數(shù)據(jù)路徑中包含中文,記得將js保存為utf8格式,以免不認識
默認情況下,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({
????????headless:?false,
????????userDataDir:?user_data_path,
????????executablePath:?chrome_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();
?
小結:
由于篇幅所限,本文就簡單的介紹到這里。具體進一步使用方法待下一篇文章中繼續(xù)介紹。感興趣的朋友可以看看這兩篇文章。(實際是同一篇文章,中文的那個是譯文)
另外,雖然有Puppeteer珠玉在前,也還是有Chromeless這樣1w多start的受歡迎的第三方社區(qū)版本出現(xiàn),感興趣的朋友可以了解一下。
?
轉載于:https://www.cnblogs.com/TianFang/p/9027187.html
總結
以上是生活随笔為你收集整理的使用Puppeteer进行数据抓取(一)——安装和使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何定义领域模型(概念模型)
- 下一篇: 连读