nodejs 爬蟲

henry_chen發表於2019-02-16

一個 nodejs 的爬蟲示例,此處用於抓取 hexo 所有主題,並排序輸出關注(star)排行

程式碼

https://github.com/henry-figh…

使用方法

  1. 安裝依賴包 npm install
  2. 執行指令 node server.js
  3. 到瀏覽器訪問 localhost:3000

背景

玩 hexo 時苦於找不到好的主題,上知乎一搜,有人通過爬蟲抓取了所有主題的排行版,但發帖時間是 2015 年的,已經過期很久。人家可以爬蟲,我也可以,所以作死的開啟了爬蟲之路

工作內容

  1. 訪問 hexo 主題頁: https://hexo.io/themes/
  2. 抓取所有主題的名字和 github 連結
  3. 訪問所有主題的 github 連結,抓取 star 數
  4. 將所有主題對 star 進行排序,並輸出到頁面

啟發

1. request VS SuperAgent

一開始按照【參考資料1】使用 SuperAgent,發現爬蟲非常慢,導致瀏覽器直接超時不訪問了。還以為是 github 慢,開戶了科學上網工具,效果一般。不得不親自“爬蟲”,訪問 github 頁面。實際上,頁面反應很快,或者說 document 載入很快,是其他資源載入慢了。SuperAgent 估計是等到頁面 loaded 了之後才返回資料。
所以,有沒有工具像 linux 裡的 curl 合集,可以只請求 document 呢?百度下來找到了 requrest,請求確實快了很多,問題解決。

那是不是說 request 就比 SuperAgent 好呢?分情況。如果爬蟲的資料在 document 裡,用 request 可以明顯加快爬蟲效率;如果爬蟲的資料是頁面 AJAX 請求得到的,就需要等到頁面載入完再爬蟲,此時就需要 SuperAgent 了。

2. 事件處理 與 函式

第一次看到事件時,一直以為事件就和函式一樣,都是執行一項任務。接觸爬蟲後發現,事件的真正作用在非同步(非同步並非併發)!!

剛開始開發爬蟲時用的是函式,發現爬蟲一直是爬完一個再爬另一個,效率非常慢(函式是順序執行的)。這裡才理解爬蟲例子中使用事件不是沒有原因的,非同步才是使用 nodejs 爬蟲最大的好處。

參考資料

  1. 【nodeJS爬蟲】前端爬蟲系列 — 小爬「部落格園」
  2. request 使用說明 github
  3. Nodejs讀寫檔案

相關文章