最近一直沒更新了誒,因為學習Backbone好頭痛,別問我為什么不繼續AngularJs~因為2.0要出來了啊,媽蛋!好,言歸正傳,最近幫我的好基友扒數據,他說要一些股票債券的數據。我一聽,那不就是要做爬蟲了么...果斷用Node做!(其實也有一個股票數據API,sina提供的,但是由於不適用於債券,沒辦法,只好自己動手豐衣足食了)
工欲善其事,必先利其器嘛,蓬勃的Node社區提供了非常多的好的工具,下面我列出將要使用的工具:
- request,封裝了Node的原生的http模塊,使API更加簡潔明了。
- cheerio,簡化的jQuery庫,可以讓你操作DOM事半功倍。
- node-xlsx,Node平台上非常好用的讀寫xlsx的插件。
- fs,Node自帶的文件操作的模塊
這次,因為是一個入門教程,涉及到的東西當然也就不多。比如對時間格式化的moment插件,還有對傻(嗶!)的GBK和gb2312編碼解碼的插件iconv-lite,這些都是非常好的東西,可以幫助大家更快更舒服的構建自己所需要的東西。所以就要求如何更快的學習閱讀API。(當然英文要好啊擦!)
首先就是通過npm加載node_modules,你可以一個個加載(npm install request),也可以在npm的package.json里的dependencies一次性npm install加載。相信大家都已經耳熟能詳啦,就不再贅述啦!(不知道的趕緊去補啊擦)
然后我們的爬蟲之旅就開始了,首先,當然就是各種require。
然后指定一個URL,供request去發送請求。就像下面一樣,這是一個異步的函數,回調函數的三個參數當然很好理解啦。
重點是在body上,body是將整個url的html文檔解析並存入body中。如果用http.on("data"),可麻煩啦。這下可好,已經幫你封裝妥當。當我們有一個DOM文檔,最想干的事情當然就是,操作DOM啊!這時cheerio就派上場了,它可以像jQuery一般操作文檔。我們來看一下,怎么做的。
是不是十分的簡單易懂呢,之后我們就可以對body盡情的揉捏了。通過jQuery的選擇器,獲取特定的DOM上的值,然后保存起來。最后來說一說,如何將保存后的值,轉化成一個Excel表格,也就是xlsx格式的文件。
node-xlsx是通過操作一個數組,然后數組里面通過不同的對象來指定Excel的sheets,然后對象里面有各種屬性,如data屬性和name屬性,一個是放數據的,一個是指定sheets的名稱的,若不填則默認為Sheet。若存在多個同名Sheet,則會使用后一個,所以name屬性,沒事就加上吧~。data屬性是精華,通過二維數組來確定行列。光說無益,來看一下代碼。
當把數據准備妥當后,便是通過fs模塊的 writeFileSync 寫入文件,參數分別為(文件名,文件數據,options選項)。最后node一執行,就可以導出文件了。可以查看一下成果。
嗯,妥妥的!
當然國內大部分坑爹的gb2312,就沒那么簡單咯。這里留個坑~~因為我在buffer這一塊,也沒弄懂~~。