這篇文章講解一下yunshare項(xiàng)目的爬蟲模型。

使用nodejs開發(fā)爬蟲很簡(jiǎn)單,不需要類似python的scrapy這樣的爬蟲框架,只需要用request或者superagent這樣的http庫(kù)就能完成大部分的爬蟲工作了。

使用nodejs開發(fā)爬蟲半年左右了,爬蟲可以很簡(jiǎn)單,也可以很復(fù)雜。簡(jiǎn)單的爬蟲定向爬取一個(gè)網(wǎng)站,可能有個(gè)幾萬(wàn)或者幾十萬(wàn)的頁(yè)面請(qǐng)求,復(fù)雜的爬蟲類似google bot這樣搜索引擎的蜘蛛爬蟲,要每時(shí)每刻爬取互聯(lián)網(wǎng)上最新的內(nèi)容。

一般的個(gè)人開發(fā)者都是用爬蟲定向爬取一些網(wǎng)站,然后提取一些結(jié)構(gòu)化的數(shù)據(jù),使用api接口獲取數(shù)據(jù)也可以歸到這一類。如果想簡(jiǎn)單的練習(xí)爬蟲技術(shù),可以嘗試爬取豆瓣電影數(shù)據(jù)和書籍?dāng)?shù)據(jù)的,使用api接口和爬取html頁(yè)面都能完成這個(gè)任務(wù)。

爬蟲的說(shuō)白了就是一個(gè)http客戶端,通過(guò)http協(xié)議和遠(yuǎn)程http服務(wù)器通信,獲取html頁(yè)面內(nèi)容或者其他的種子文件,pdf文件等等。和瀏覽器不同的一點(diǎn)就是爬蟲不會(huì)把抓取的內(nèi)容渲染出來(lái),而是解析頁(yè)面內(nèi)容然后保存到數(shù)據(jù)庫(kù)里面。

在開始學(xué)習(xí)爬蟲的時(shí)候我考慮的是怎么爬取html頁(yè)面內(nèi)容,怎么解析html頁(yè)面之間的鏈接規(guī)則,后來(lái)遇到了頁(yè)面編碼的問題。

統(tǒng)一utf8編碼

國(guó)內(nèi)網(wǎng)站主要是使用html和gbk這兩種編碼方式,解決編碼有兩種思路,第一個(gè)是在獲取頁(yè)面內(nèi)容的時(shí)候根據(jù)頁(yè)面的<meta charset='gbk'>編碼把內(nèi)容統(tǒng)一轉(zhuǎn)碼成utf8的,因?yàn)閚odejs字符串默認(rèn)編碼就是utf8。

這個(gè)方案充滿了不確定性。

問題1:不同網(wǎng)站的指定編碼的方式不一樣,除了前面提到的那種方式,還有<meta http-equiv="Content-Type" content="text/html; charset=gbk">這種方式指定編碼,這個(gè)問題還不是很大,很多的http工具庫(kù)都能正確的解析這兩種編碼,問題是還有很多網(wǎng)站沒有指定編碼,又或者指定的編碼和文件的實(shí)際編碼不一致(遇到過(guò)真實(shí)的案例)。

問題2:如果你把gbk編碼的html文件轉(zhuǎn)成utf8編碼保存到本地,用瀏覽器直接打開這個(gè)文件的時(shí)候會(huì)顯示亂碼,非常不利于開發(fā)過(guò)程中的查找問題。

不轉(zhuǎn)碼html內(nèi)容

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式