爬蟲項目的整理與回顧

最近公司的基於HTTP請求的爬蟲出現了頻繁被BLCOK的問題,你們商量了解決方案最終敲定使用基於Selenium的Phantomjs。git

如下是我的整理目前經常使用的爬蟲架構:
技術 擬人度 爬取效率 被BLOCK機率 硬件要求
HTTPClient LOW HIGH HIGH LOW
HtmlUnitDrvier Medium-Low Medium-High Medium LOW
PhantomJS Medium HIGH LOW Medium
ChromeDriver HIGH LOW LOW HIGH

ChromeDriver+Selenium運行在Linux等無界面服務器須要安裝XVFB提供模擬界面,消耗一部分資源 10-10更新 最近嘗試了下Selenium的HtmlUnitDriver. 這是一個真正的handless支持JS的內核.缺點很明顯, 本身的瀏覽器內核不作複雜的設置甚至直接被Google拒絕訪問,測試一些靜態頁面的效果和效率還不錯,帶有比較複雜的JS解析或者需求較複雜時就變得很不穩定,常常一個請求出一些莫名的錯誤..建議在靜態頁面和小網站中使用

如下是設計的爬取流程
  1. 待爬取的關鍵詞被送到AWS的SQS服務
  2. 爬蟲開始從SQS輪詢關鍵字
  3. 開始爬取關鍵詞
  4. 分析爬取結果
  5. 爬取成功從SQS刪除這個關鍵字
  6. 爬取失敗從新設置Proxy
  7. 爬取的結果會被送到AWS的S3和Scribe服務器進行雲存儲

SQS的服務在百度和阿里也提供.github

這樣的架構把爬蟲從整個體系中剝離了出來,爬蟲沒必要關心須要爬那些,是否是被其餘服務器的爬過了,爬取的結果怎麼解析等等,只須要專一於拿關鍵詞,設置代理,爬取,簡單處理結果就OK. 說白了就是解耦,都幹好本身的事情就OK了.如今雲系統怎麼發達,基本專一於核心開發,一些存儲和消息隊列等等不用太糾結.瀏覽器

項目涉及的技術

Selenium+GhostDriver+PhantomJS服務器

結構管理用的是Maven架構

託管在本身公司的Git倉庫less

目前來看Google/Yandex/Naver/Bing/Yahoo等主流的搜索引擎都沒有什麼問題(咱們不爬baidu的數據)測試

防Block一點策略

  • Google不要頻繁切換Country
  • 不要直接修改URL,每頁顯示結果數等都須要經過SettingPage點擊設置
  • 每次搜索結束模擬人的操做,相似於滾動鼠標,瀏覽結果,點擊1~2個排名靠前的結果
  • 能夠購買解碼服務,被要求輸入驗證碼用
相關文章
相關標籤/搜索