国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

分布式代理爬蟲:架構篇

qujian / 1374人閱讀

摘要:降低的結果可能有三個隨著數據量的增大的性能受到了一定的影響知乎校驗器在把中的代理消費完之后,由于是定時任務,所以導致某段時間內新鮮的空缺。

歷時大致兩個月,到現在終于完成了分布式代理抓取爬蟲,目前開源在了Github上。寫這個項目的原因主要有兩點,一是自己平時的部分工作需要和爬蟲打交道,代理IP在有的時候可以發揮非常重要的作用,調研過一些開源的代理IP采集程序,發現在抓取、解析、校驗、資源調度等這些方面總有一些不盡人意的地方;二是和一個網友(不嚴格的說算得上是伯樂)的交流讓我有了關于使用Scrapy來寫分布式爬蟲的一些想法,正好可以借助這個機會來嘗試證實這些想法。


這篇文章的目的是闡述haipproxy的主要架構和流程。該項目關鍵部分是

基于Scrapy和Redis的分布式爬蟲,用作IP抓取和校驗,對應于項目的crawler

基于Redis實現的分布式任務調度工具,對應于項目的scheduler和redis_util.py

Crawler分為代理抓取和校驗,兩者實現思想類似,主要使用Scrapy的spider_idle信號和DontCloseSpider異常來阻止Scrapy在沒有數據的時候關閉,靈感來自scrapy-redis。為了方便闡述,我畫了一張包含各個組件的流程圖,如下

啟動調度器,包括代理爬蟲調度器和校驗爬蟲調度器。調度器會讀取rules.py中待抓取的網站,將其編排成任務存入各個任務隊列中

啟動各個爬蟲,包括IP抓取和校驗程序。項目中爬蟲和調度器都是高可用的,可以根據實際情況進行分布式部署,無需改動代碼。由于本文的目標不是寫成該項目的詳細使用文檔,所以省略了如指定啟動爬蟲類型和調度器類型的介紹

代理IP采集爬蟲啟動后會到對應的任務隊列中獲取任務并執行,再把獲取到的結果存入一個init隊列中

init隊列由一個特殊的校驗器HttpbinInitValidator進行消費,它會過濾掉透明代理,再把可用代理輸入各個Validated隊列中

調度器會定時從Validated隊列中獲取代理IP,再將其存入一個臨時的隊列。這里用一個臨時隊列是為了讓校驗更加公平,如果直接從Validated隊列中獲取資源進行校驗,那么會增大不公平性

這時候各個校驗器(非init校驗器)會從對應的臨時隊列中獲取待校驗的IP并對其進行校驗,此處省略校驗細節

校驗完成后再將其放回到Validated隊列中,等待下一輪校驗

請求成功率(體現為分數)、響應速度和最近校驗時間滿足settings.py所配置要求的代理IP將會被爬蟲客戶端所消費

為了屏蔽各個調用語言的差異性,目前實現的客戶端是squid客戶端,它可以作為爬蟲客戶端的中間件

到此,整個流程便完了。


效果測試

以單機模式部署haipproxy和測試代碼,以知乎為目標請求站點,
每一萬條成功請求為統計結果,實測抓取效果如下

請求量 時間 耗時 IP負載策略 客戶端
0 2018/03/03 22:03 0 greedy py_cli
10000 2018/03/03 11:03 1 hour greedy py_cli
20000 2018/03/04 00:08 2 hours greedy py_cli
30000 2018/03/04 01:02 3 hours greedy py_cli
40000 2018/03/04 02:15 4 hours greedy py_cli
50000 2018/03/04 03:03 5 hours greedy py_cli
60000 2018/03/04 05:18 7 hours greedy py_cli
70000 2018/03/04 07:11 9 hours greedy py_cli
80000 2018/03/04 08:43 11 hours greedy py_cli

可見haipporxy的代理效果還算不錯,在開始的時候可以達到1w/hour的請求量,幾個小時候請求量請求量
降為了5k/hour。降低的結果可能有三個: (1)隨著數據量的增大,Redis的性能受到了一定的影響(2)知乎校驗器在把Init Queue中的代理消費完之后,由于是定時任務,所以導致某段時間內新鮮的IP空缺。而免費IP大多數都是短效的,所以這段時間出現了IP的空缺;(3)由于我們采用的是greedy模式調用IP,它的調用策略是: 高質量代理IP會一直被調用直至該代理IP不能用或者被封,而低應速度IP會輪詢調用。這也可能導致高質量IP的空缺。
可見IP校驗和調用策略還有很大的優化空間。

項目地址: https://github.com/SpiderClub...

歡迎star和fork,也歡迎大家交流和PR。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/44577.html

相關文章

  • 后端知識拓展 - 收藏集 - 掘金

    摘要:阻塞,非阻塞首先,阻塞這個詞來自操作系統的線程進程的狀態模型網絡爬蟲基本原理一后端掘金網絡爬蟲是捜索引擎抓取系統的重要組成部分。每門主要編程語言現未來已到后端掘金使用和在相同環境各加載多張小圖片,性能相差一倍。 2016 年度小結(服務器端方向)| 掘金技術征文 - 后端 - 掘金今年年初我花了三個月的業余時間用 Laravel 開發了一個項目,在此之前,除了去年換工作準備面試時,我并...

    CoderBear 評論0 收藏0
  • 后端知識拓展 - 收藏集 - 掘金

    摘要:阻塞,非阻塞首先,阻塞這個詞來自操作系統的線程進程的狀態模型網絡爬蟲基本原理一后端掘金網絡爬蟲是捜索引擎抓取系統的重要組成部分。每門主要編程語言現未來已到后端掘金使用和在相同環境各加載多張小圖片,性能相差一倍。 2016 年度小結(服務器端方向)| 掘金技術征文 - 后端 - 掘金今年年初我花了三個月的業余時間用 Laravel 開發了一個項目,在此之前,除了去年換工作準備面試時,我并...

    Carl 評論0 收藏0
  • 面向對象的布式爬蟲框架XXL-CRAWLER

    摘要:面向對象的分布式爬蟲框架一簡介概述是一個面向對象的分布式爬蟲框架。分布式集群集群方式維護爬蟲爬蟲運行數據,可通過或定制實現。 《面向對象的分布式爬蟲框架XXL-CRAWLER》 showImg(https://segmentfault.com/img/remote/1460000011842697);showImg(https://segmentfault.com/img/remote...

    anquan 評論0 收藏0
  • 精通Python網絡爬蟲(0):網絡爬蟲學習路線

    摘要:以上是如果你想精通網絡爬蟲的學習研究路線,按照這些步驟學習下去,可以讓你的爬蟲技術得到非常大的提升。 作者:韋瑋 轉載請注明出處 隨著大數據時代的到來,人們對數據資源的需求越來越多,而爬蟲是一種很好的自動采集數據的手段。 那么,如何才能精通Python網絡爬蟲呢?學習Python網絡爬蟲的路線應該如何進行呢?在此為大家具體進行介紹。 1、選擇一款合適的編程語言 事實上,Python、P...

    spacewander 評論0 收藏0

發表評論

0條評論

qujian

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<