模組
node.js 爬蟲需要用到兩個 Library
- request:主要是用來模擬 HTTP 的動作,可以用來取得整個頁面的 HTML。
- cheerio:從 HTML 中擷取需要的資料。
安裝
1 | $ npm i request -s |
載入
安裝好後就可以看到專案的 package.json 已經出現,這時候就可以引入程式中。
1 | const request = require("request"); |
觀察
這邊使用 Ptt Marvel 板檔做範例,會用到 Chrome Dev Tool 來分析網頁的 html。
1.先取得需要的區塊
2.接著可以看到一個 <div class="r-ent"></div>
就是一個小區塊。
實作
找到需要的畫面後,就需要用 request 抓取頁面 html,而這裡的 body 是一整網頁裡 body 的內容。
1 | const getMarvelTitle = () => { |
接著使用 cheerio 擷取 body 裡需要的部分。
1 | const data = []; |
因為我只想看經驗文所以只撈經驗文出來,撈出來的畫面如下。
這邊使用 for 迴圈是因為父元素 (.r-list-container) 裡包著許多子元素 (.r-ent) 的結構。
除了爬標題外,也可以順便爬文章內容,一樣會使用到 request、cheerio。
不同的是 request 的網址 及 載入 body 後的程式碼。
首先一樣先分析網頁,可以看到文章內容是在 <div id="main-content" class="bbs-screen bbs-content"></div>
裡,所以就直接選擇 css="bbs-content"
的元素即可。
1 | const $ = cheerio.load(body); |
最後爬到的內容會包含下面的留言區塊,直接使用 slice 把 -----
後面的都砍掉,就會單獨顯示文章內容了~