最近因?yàn)閯』?,老大追了?ài)奇藝的一部網(wǎng)劇,由丁墨的同名小說(shuō)《美人為餡》改編,目前已經(jīng)放出兩季,雖然整部劇槽點(diǎn)滿(mǎn)滿(mǎn),但是老大看得不亦樂(lè)乎,并且在看完第二季之后跟我要小說(shuō)資源,直接要奔原著去看結(jié)局……
隨手搜了下,都是在線(xiàn)資源,下載的話(huà)需要登錄,注冊(cè)登錄好麻煩,寫(xiě)個(gè)爬蟲(chóng)玩玩也好,于是動(dòng)手用 node 寫(xiě)了一個(gè),這里做下筆記
工作流程
- 獲取 URLs 列表(請(qǐng)求資源 request 模塊)
- 根據(jù) URLs 列表獲取相關(guān)頁(yè)面源碼(可能遇到頁(yè)面編碼問(wèn)題,iconv-lite 模塊)
- 源碼解析,獲取小說(shuō)信息( cheerio 模塊)
- 保存小說(shuō)信息到 Markdown 文件,并且加適當(dāng)修飾以及章節(jié)信息(寫(xiě)文件 fs、同步請(qǐng)求資源 sync-request 模塊)
- Markdown 轉(zhuǎn) PDF (使用 Pandoc 或者 Chrome 的打印功能)
獲取 URLs
根據(jù)小說(shuō)的導(dǎo)航頁(yè),獲取小說(shuō)所有章節(jié)的 URL,并且以 JSON 數(shù)組的方式存儲(chǔ)。
- 首選通過(guò) http.get() 方法獲取頁(yè)面源碼
- 獲取到源碼,打印發(fā)現(xiàn)中文亂碼,查看發(fā)現(xiàn) charset = 'gbk',需要進(jìn)行轉(zhuǎn)碼
- 使用 iconv-lite 模塊進(jìn)行轉(zhuǎn)碼,中文顯示正常后開(kāi)始解析源碼,獲取需要的 URL,為了更方便地解析,需要引進(jìn) cheerio 模塊,cheerio 可以理解為運(yùn)行在后臺(tái)的 jQuery,用法與 jQuery 也十分相似,熟悉 jQuery 的同學(xué)可以很快的上手
- 將源碼加載進(jìn) cheerio,分析了源碼后得知所有章節(jié)信息都存于被 div 包裹的 a 標(biāo)簽中,通過(guò) cheerio 取出符合條件的 a 標(biāo)簽組,進(jìn)行遍歷,獲取章節(jié)的 title 和 URL,保存為對(duì)象,存進(jìn)數(shù)組,(因?yàn)殒溄又写鎯?chǔ)的 URL 不完整,所以存儲(chǔ)時(shí)需要補(bǔ)齊)
- 將對(duì)象數(shù)組序列化,寫(xiě)進(jìn) list.json 文件
var http = require("http") var fs = require(
延伸閱讀
- ssh框架
2016-09-30
- 阿里移動(dòng)安全 [無(wú)線(xiàn)安全]玩轉(zhuǎn)無(wú)線(xiàn)電——不安全的藍(lán)牙鎖
2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe
2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】
2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞
2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention
2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明
2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解
2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析
2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二)
2017-07-26
學(xué)習(xí)是年輕人改變自己的最好方式