嘉明湖山屋爬蟲 : part 1

沒想到檜谷山莊/營地、嘉明湖山屋、向陽山屋的申請網站竟然換地方了,記得 2015 年的時候,都還是在 台灣山林悠遊網 裡頭的,現在竟然分成了 2 個網站,然後分別屬於屏東林管處和台東林管處的…

所以囉,之前寫過的爬蟲又要重寫了

令人稍感欣慰的是,嘉明湖山屋的申請網站(嘉明湖國家步道)從原本的 ASP.NET 改成用 PHP 寫了,所以寫爬蟲送 Ajax 的時候,終於不用處理一堆 .NET 專屬的 __VIEWSTATE 了。

可喜可樂

爬蟲開始

我是用 Node.js 寫爬蟲的,用到的套件有下面這些:

let moment = require('moment');      // 常用的時間處理套件
let co = require('co'); // 用來寫漂亮的 flow-control
let rp = require('request-promise'); // 用來發 http request
let cheerio = require('cheerio'); // 用來做 html parser

利用 request-promise 發出不帶 query 的 Ajax,我們就能拿到當月份的山屋資訊網頁。

什麼 query 都沒帶的 Ajax
能拿到當月份的 table 資料
單看一天的山屋資訊 html

接著再透過 cheerio 去爬出想要的資料,就完成了。

爬蟲 source code
執行的結果

過程中比較有趣的部分有兩個

  1. 現在才發現原來 css selector 可以對 attribute 做 select!
  2. 成功使用了 Regexp 的 group 功能去爬出床位數字~ 耶耶!

至於如何繼續把下個月份的資料也爬出來,就等下一篇文章再說囉!