2021-02-24|閱讀時間 ‧ 約 3 分鐘

Node.js 爬蟲 — 自動化下載 1,178 張吉卜力作品劇照

如果想直接使用,或是觀看好讀版,可參照專案網址。
如果想直接使用,或是觀看好讀版,可參照專案網址
最近對爬蟲感到興趣,幾天的研究發現 Puppeteer 這套由 Google 開源、使用無介面操作 Chrome 做自動化測試的 Node.js 函式庫也能用來爬取資料,因此決定使用 Node.js 搭配 Puppeteer 和 Axios (基於 promise 的 HTTP 庫),自動化將先前作品「吉卜力相簿」 上的一千多張作品劇照下載下來。
Puppeteer 可由 npm 進行安裝,如果電腦中有基於 Chromium 的瀏覽器,可下載容量較小的核心版本,之後再將啟動路徑設置為應用程式路徑即可 (範例使用 Brave 瀏覽器):
$ npm i puppeteer-core
Puppeteer 的語法並不難,在官方文件中可找到許多範例;而其中因為大多自動化操作屬於非同步行為,需要另外使用 async/await 語法確保程式依序執行,算是比較需要注意的部分,較常用到的指令有:
這次實作中遇到最大的問題是在大量下載圖片時,Node 端遇到的錯誤,原因由短時間內發出過多請求導致圖片下載失敗,透過加上 slowMo 參數,將自動化操作的速度減慢得以解決:
$ (node:15319) UnhandledPromiseRejectionWarning: Error: getaddrinfo ENOTFOUND www.ghibli.jpat GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:67:26)(Use `node — trace-warnings …` to show where the warning was created)
完成初次爬蟲和自動化程序的過程中小有成就感,如果未來有需求,也許還會使用類似的方式做網頁轉 PDF、自動化登入操作,又或是定時爬完資料後結合寄信功能做 Email 通知吧!

感謝您的閱讀,我試著將生活與自己所學到的知識,以平易近人的方式傳達給正在努力進步的同好,甚至是領域之外卻有興趣的人。如果喜歡我的文章,歡迎贊助我,你的鼓勵也是我進步的動力。
分享至
成為作者繼續創作的動力吧!
居住於台北市,熱衷網站開發和設計,認為兩者相輔相臣,致力於做到開發如同揮劍一般優雅。更多關於我:https://rayc.dev/links
從 Google News 追蹤更多 vocus 的最新精選內容從 Google News 追蹤更多 vocus 的最新精選內容

發表回應

成為會員 後即可發表留言