當前位置:編程學習大全網 - 編程語言 - 如何使用Node.js爬取任意網頁資源並輸出PDF文件到本地

如何使用Node.js爬取任意網頁資源並輸出PDF文件到本地

需求:

使用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 是可以上天的,或許未來它真的什麽都能做。這麽優質簡短的教程,請收藏

或者轉發給您的朋友,謝謝。

  • 上一篇:靜安規劃
  • 下一篇:vhd任務編程
  • copyright 2024編程學習大全網