關(guān)于爬蟲的瞎想

1.爬蟲定義
爬蟲就是用計算機代替人工去獲取海量的web數(shù)據(jù)的程序。是獲取數(shù)據(jù)的一種方式酝润,也是數(shù)據(jù)分析的前提。

2.編寫一個合格的爬蟲程序
1)爬蟲程序目的不是攻擊網(wǎng)站,而是獲取開放的數(shù)據(jù)镶苞。但是由于爬蟲的程序特性,獲取資源速度過快鞠评,可能會導致服務器癱瘓茂蚓。因此爬取信息時需要盡量模仿人工獲取行為,所以發(fā)送多個請求之間盡量間隔一個合理的隨機時間剃幌。

2)有些網(wǎng)站對爬蟲程序做了一些防備聋涨,比如請求頭的驗證。解決起來很簡單负乡,在請求頭中加入一些客戶端信息(如:User-Agent)或者上下文信息(如:Referer)牍白。

3)有些信息需要登陸之后才能訪問。于是模擬登陸就成了爬蟲程序需要的基本功能敬鬓,也是實現(xiàn)起來較為復雜的淹朋。
常見的網(wǎng)站登陸校驗方式有兩種,一種基于cookie钉答,一種基于token础芍。
cookie與服務器端的session一同保證交互的狀態(tài),用于克服http請求的無狀態(tài)特性数尿。這種情況的第一步當然是尋找登陸接口仑性,該過程一般為手動尋找。通過向登陸接口提交賬號密碼右蹦,進行登陸诊杆,服務器端登陸校驗過后,會在session中記錄登錄信息何陆,所以只需要保留已驗證的cookie晨汹,每次請求通過攜帶cookie信息,就能獲得已登陸的權(quán)限贷盲。
不過模擬登陸實現(xiàn)起來并不簡單淘这,因為很多網(wǎng)站的登陸接口遠遠不止只輸入賬號密碼這么簡單。常見的防備有驗證碼巩剖,還有動態(tài)生成的一些認證字符串铝穷。這些都讓爬蟲程序的模擬登陸不能做到完全自動化。一些簡單的驗證碼也許能夠使用一些圖像識別函數(shù)庫進行自動解析佳魔。

簡單的數(shù)字驗證碼
復雜一點的中文驗證碼

不過遇到一些高級的驗證方式就可能非常困難了:

厲害了

更別說一些奇葩的驗證碼曙聂,連手動驗證都有點小困難:


Paste_Image.png

以上純屬驗證碼搞笑,主要還是想說明模擬登陸的困難鞠鲜。

4)頁面js的處理宁脊,有些數(shù)據(jù)可能需要執(zhí)行js代碼后才會顯示在頁面上断国,這就表示網(wǎng)頁源代碼中是沒有我們需要的數(shù)據(jù)的。比如常見的ajax請求朦佩,獲取到數(shù)據(jù)之后再利用js將數(shù)據(jù)插入頁面并思。

3.擴展性的思考
對于爬蟲程序,要做到有效语稠,就必須要專一宋彼。因為web網(wǎng)頁結(jié)構(gòu)多種多樣,數(shù)據(jù)在頁面上的分布也不盡相同仙畦∈涮椋可以說爬蟲程序要做到抽象是很困難的。
不過這也不代表無法得到一個擴展性好的設計慨畸。
只要將爬取規(guī)則常見的情況列舉出來莱坎,似乎就能夠得到一些共性。
比如寸士,webmagic中就將爬取規(guī)則抽象成了help url和target url檐什。前者是列表頁面的url,后者是數(shù)據(jù)實體的url弱卡。比如前者代表文章列表乃正,后者就是某個文章頁面。這樣的設計符合大多數(shù)情況婶博。

我們可以把最終要的數(shù)據(jù)分為三種瓮具。
1)一個頁面代表一個數(shù)據(jù)實體。
2)一個接口返回的json或者xml數(shù)據(jù)代表一個數(shù)據(jù)實體凡人。
3)一個數(shù)據(jù)實體的部分數(shù)據(jù)在一個頁面上名党,部分數(shù)據(jù)又來自ajax請求。
其中第三種是復雜的挠轴,因為需要通過不同的接口拼裝出一個數(shù)據(jù)實體传睹。而程序是難以自行發(fā)現(xiàn)這些接口的。

雖然不同網(wǎng)站對登陸的實現(xiàn)不同岸晦,但無非是提交賬號密碼和驗證數(shù)據(jù)給登陸接口欧啤。然后通過已認證的cookie或者token作為登陸憑證和服務器進行后續(xù)的交互。
難點是委煤,如何讓程序自行發(fā)現(xiàn)需要進行登陸堂油,或者之前的登陸已失效修档。服務器肯定是會告訴客戶端這些信息的碧绞,但是這里不同的網(wǎng)站實現(xiàn)又會不一樣,有的網(wǎng)站是直接跳轉(zhuǎn)至登陸頁面吱窝,而有的網(wǎng)站是返回一個錯誤碼讥邻,彈框確認之后再跳轉(zhuǎn)迫靖,或者有些設計不佳的網(wǎng)站,登陸失效后什么也不提示兴使,直接不返回任何數(shù)據(jù)系宜。

總的來說,要把一個爬蟲程序做好发魄,最好還是先做到專一盹牧,根據(jù)不同的網(wǎng)站設計不同的爬取規(guī)則,編寫不同的實現(xiàn)励幼,這樣雖然不易擴展汰寓,但實現(xiàn)起來要方便。等這般設計的系統(tǒng)穩(wěn)定之后苹粟,如果業(yè)務所需的數(shù)據(jù)來源不再變化有滑,再將已有的數(shù)據(jù)來源的通用部分進行抽象,再來考慮擴展性嵌削。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末毛好,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子苛秕,更是在濱河造成了極大的恐慌肌访,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件想帅,死亡現(xiàn)場離奇詭異场靴,居然都是意外死亡,警方通過查閱死者的電腦和手機港准,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門旨剥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浅缸,你說我怎么就攤上這事轨帜。” “怎么了衩椒?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵蚌父,是天一觀的道長。 經(jīng)常有香客問我毛萌,道長苟弛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任阁将,我火速辦了婚禮膏秫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘做盅。我一直安慰自己缤削,他們只是感情好窘哈,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著亭敢,像睡著了一般滚婉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上帅刀,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天让腹,我揣著相機與錄音,去河邊找鬼扣溺。 笑死哨鸭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的娇妓。 我是一名探鬼主播像鸡,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼哈恰!你這毒婦竟也來了只估?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤着绷,失蹤者是張志新(化名)和其女友劉穎蛔钙,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荠医,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡吁脱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了彬向。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兼贡。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖娃胆,靈堂內(nèi)的尸體忽然破棺而出遍希,到底是詐尸還是另有隱情,我是刑警寧澤里烦,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布凿蒜,位于F島的核電站,受9級特大地震影響胁黑,放射性物質(zhì)發(fā)生泄漏废封。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一丧蘸、第九天 我趴在偏房一處隱蔽的房頂上張望漂洋。 院中可真熱鬧,春花似錦、人聲如沸氮发。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爽冕。三九已至,卻和暖如春披蕉,著一層夾襖步出監(jiān)牢的瞬間颈畸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工没讲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眯娱,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓爬凑,卻偏偏與公主長得像徙缴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嘁信,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,077評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理于样,服務發(fā)現(xiàn),斷路器潘靖,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 從三月份找實習到現(xiàn)在穿剖,面了一些公司,掛了不少卦溢,但最終還是拿到小米糊余、百度、阿里单寂、京東贬芥、新浪、CVTE宣决、樂視家的研發(fā)崗...
    時芥藍閱讀 42,240評論 11 349
  • Q1:超級組,兩個動作之間連續(xù)不間歇嗎椒丧?兩組超級組的組間休多久耙忌? A1:超級組訓練法壶熏,一個超級組中的兩個動作句柠,要...
    硬派健身閱讀 680評論 0 2
  • 讀書群里好多人都有看過這本書,我最初以為它純粹是國外的一系列書單的推薦書籍,看過后才明白不僅僅只是這樣溯职,圍繞小島書...
    啾啾fing閱讀 265評論 0 1