網絡爬蟲簡單策略

  公欲善其事,必先利其器。

 前幾天同學問我,獲取一個網站的資料是通過api調用好還是通過網絡爬蟲好,我說如果api可以滿足需求那可以直接調api因爲api是網站給你暴露的接口,客服端開發起來方便,並且返回的數據好解析,只要按他的規則來就應該沒什麼大的問題,不要考慮策略去獲取最新的資料,可有個很大的問題就是通過api的調用完全受api服務器端限制,就和在中國上網一樣,說哪個網站不上你上,那你通過合法的流程肯定是上不了的。

   網絡爬蟲有個很大的好處,不太受服務器端的限制,你可以通過許多策略去繞過它,他們一般有以下可以做限制的:


    1.通過ip限制。

    2.通過cookie限制

    3.通過加密算法加密請求的url

    4.通過你請求的header限制

    5.通過回答問題或驗證碼限制

    6.歡迎補充


   其中除了出現驗證碼,其他都可以破解,那我就簡單介紹下我的策略吧!


   對於單位時間訪問過多,服務器端可能會給你的ip直接封死,有兩個方法可以繞過這個規則,第一,給你請求的http設置代理,現在的代理ip比較多,不過要慢慢找,很多都不能使用。第二個方法:大部分人用的是adsl上網,那adsl有一個很好的優點就是ip不是固定的,所以重啓下路由就可以換個新的ip了,不過要注意不要出現重啓後還出現之前用的ip了!所以我們要給ip簡單過濾下。


   出現通過cookie限制的話,那你程序就一步一步的請求,最好不要跳步,如果用httpclient寫的爬蟲,那設置當請求時自動在請求體中加上cookie。


   通過加密算法加密請求的url,那必須知道它的加密算法寫在哪,比如說sina之前的郵箱加密算法寫在js裏面,並且比較複雜,那可以用java執行加密js生成結果,所以也不一定要搞懂它是怎麼加密的,除非真正沒其他辦法,那隻能看懂它的加密算法,再自己實現。


   通過你請求的header限制是比較簡單的限制,就是判斷你請求的header是否符合要求,UA是否有,是否符合要求,host是否有......所以只要你請求時加上必要的header就行。


   通過回答問題限制那就先好好分析它的問題,因爲題庫總是有限的,有點的題目本來就很簡單,比如兩數相加相減什麼的,那可以用程序自動分析,自動執行。


   最後有個最難的就是出現圖片的一切驗證,反正我是破解不了,那怎麼辦?一般出現驗證碼肯定影響用戶體驗,所以被抓去的網站肯定也不是很喜歡,但爲了防止一些非法請求還必須加上,所以出現驗證碼的大部分都是有原因的,哈哈...有點誇張,所以我們按正規的流程走是不會出現驗證碼的,所以要把爬蟲寫得像人請求一樣,那你就算成功了一大半了。


   往往寫網絡爬蟲要把幾個策略一起使用,一點一點試服務器端的規則,繞過規則就是天堂。


轉載請註明來自於:http://alexchan.iteye.com/blog/1512996

發佈了34 篇原創文章 · 獲贊 10 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章