使用Node.js爬取網頁資源,開箱即用的配置
將爬取到的網頁內容以PDF格式輸出
如果妳是壹名技術人員,那麽可以看我接下來的文章,否則,請直接移步到我的github倉庫,直接看文檔使用即可
倉庫地址:附帶文檔和源碼
本需求使用到的技術:Node.js和puppeteer
puppeteer 官網地址: puppeteer地址
Node.js官網地址:鏈接描述
Puppeteer是谷歌官方出品的壹個通過DevTools協議控制headless Chrome的Node庫。可以通過Puppeteer的提供的api直接控制Chrome模擬大部分用戶操作來進行UI Test或者作為爬蟲訪問頁面來收集數據。
環境和安裝
Puppeteer本身依賴6.4以上的Node,但是為了異步超級好用的async/await,推薦使用7.6版本以上的Node。另外headless Chrome本身對服務器依賴的庫的版本要求比較高,centos服務器依賴偏穩定,v6很難使用headless Chrome,提升依賴版本可能出現各種服務器問題(包括且不限於無法使用ssh),最好使用高版本服務器。(建議使用最新版本的Node.js)
小試牛刀,爬取京東資源
const puppeteer = require('puppeteer'); // 引入依賴
(async () => { //使用async函數完美異步
const browser = await puppeteer.launch(); //打開新的瀏覽器
const page = await browser.newPage(); // 打開新的網頁
await page.goto('/download/,Node.js的中文官網下載對應的操作系統包
第二步,在下載安裝完了Node.js後, 啟動windows命令行工具(windows下啟動系統搜索功能,輸入cmd,回車,就出來了)
第三步 需要查看環境變量是否已經自動配置,在命令行工具中輸入 node -v,如果出現 v10. ***字段,則說明成功安裝Node.js
第四步 如果您在第三步發現輸入node -v還是沒有出現 對應的字段,那麽請您重啟電腦即可
第五步 打開本項目文件夾,打開命令行工具(windows系統中直接在文件的url地址欄輸入cmd就可以打開了),輸入 npm i cnpm nodemon -g
第六步 下載puppeteer爬蟲包,在完成第五步後,使用cnpm i puppeteer --save 命令 即可下載
第七步 完成第六步下載後,打開本項目的url.js,將您需要爬蟲爬取的網頁地址替換上去(默認是/)
第八步 在命令行中輸入 nodemon index.js 即可爬取對應的內容,並且自動輸出到當前文件夾下面的index.pdf文件中
TIPS: 本項目設計思想就是壹個網頁壹個PDF文件,所以每次爬取壹個單獨頁面後,請把index.pdf拷貝出去,然後繼續更換url地址,繼續爬取,生成新的PDF文件,當然,您也可以通過循環編譯等方式去壹次性爬取多個網頁生成多個PDF文件。
對應像京東首頁這樣的開啟了圖片懶加載的網頁,爬取到的部分內容是loading狀態的內容,對於有壹些反爬蟲機制的網頁,爬蟲也會出現問題,但是絕大多數網站都是可以的
const puppeteer = require('puppeteer');
const url = require('./url');
(async () => {
const browser = await puppeteer.launch({ headless: true })
const page = await browser.newPage()
//選擇要打開的網頁
await page.goto(url, { waitUntil: 'networkidle0' })
//選擇妳要輸出的那個PDF文件路徑,把爬取到的內容輸出到PDF中,必須是存在的PDF,可以是空內容,如果不是空的內容PDF,那麽會覆蓋內容
let pdfFilePath = './index.pdf';
//根據妳的配置選項,我們這裏選擇A4紙的規格輸出PDF,方便打印
await page.pdf({
path: pdfFilePath,
format: 'A4',
scale: 1,
printBackground: true,
landscape: false,
displayHeaderFooter: false
});
await browser.close()
})()
文件解構設計
數據在這個時代非常珍貴,按照網頁的設計邏輯,選定特定的href的地址,可以先直接獲取對應的資源,也可以通過再次使用 page.goto方法進入,再調用 page.evaluate() 處理邏輯,或者輸出對應的PDF文件,當然也可以壹口氣輸出多個PDF文件~
這裏就不做過多介紹了,畢竟 Node.js 是可以上天的,或許未來它真的什麽都能做。這麽優質簡短的教程,請收藏
或者轉發給您的朋友,謝謝。