這篇文章講解一下yunshare項目的爬蟲模型。
使用nodejs開發(fā)爬蟲很簡單,不需要類似python的scrapy這樣的爬蟲框架,只需要用request或者superagent這樣的http庫就能完成大部分的爬蟲工作了。
使用nodejs開發(fā)爬蟲半年左右了,爬蟲可以很簡單,也可以很復(fù)雜。簡單的爬蟲定向爬取一個網(wǎng)站,可能有個幾萬或者幾十萬的頁面請求,復(fù)雜的爬蟲類似google bot這樣搜索引擎的蜘蛛爬蟲,要每時每刻爬取互聯(lián)網(wǎng)上最新的內(nèi)容。
一般的個人開發(fā)者都是用爬蟲定向爬取一些網(wǎng)站,然后提取一些結(jié)構(gòu)化的數(shù)據(jù),使用api接口獲取數(shù)據(jù)也可以歸到這一類。如果想簡單的練習爬蟲技術(shù),可以嘗試爬取豆瓣電影數(shù)據(jù)和書籍數(shù)據(jù)的,使用api接口和爬取html頁面都能完成這個任務(wù)。
爬蟲的說白了就是一個http客戶端,通過http協(xié)議和遠程http服務(wù)器通信,獲取html頁面內(nèi)容或者其他的種子文件,pdf文件等等。和瀏覽器不同的一點就是爬蟲不會把抓取的內(nèi)容渲染出來,而是解析頁面內(nèi)容然后保存到數(shù)據(jù)庫里面。
在開始學習爬蟲的時候我考慮的是怎么爬取html頁面內(nèi)容,怎么解析html頁面之間的鏈接規(guī)則,后來遇到了頁面編碼的問題。
統(tǒng)一utf8編碼
國內(nèi)網(wǎng)站主要是使用html和gbk這兩種編碼方式,解決編碼有兩種思路,第一個是在獲取頁面內(nèi)容的時候根據(jù)頁面的<meta charset='gbk'>編碼把內(nèi)容統(tǒng)一轉(zhuǎn)碼成utf8的,因為nodejs字符串默認編碼就是utf8。
這個方案充滿了不確定性。
問題1:不同網(wǎng)站的指定編碼的方式不一樣,除了前面提到的那種方式,還有<meta http-equiv="Content-Type" content="text/html; charset=gbk">這種方式指定編碼,這個問題還不是很大,很多的http工具庫都能正確的解析這兩種編碼,問題是還有很多網(wǎng)站沒有指定編碼,又或者指定的編碼和文件的實際編碼不一致(遇到過真實的案例)。
問題2:如果你把gbk編碼的html文件轉(zhuǎn)成utf8編碼保存到本地,用瀏覽器直接打開這個文件的時候會顯示亂碼,非常不利于開發(fā)過程中的查找問題。
不轉(zhuǎn)碼html內(nèi)容
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26