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

資訊專欄INFORMATION COLUMN

MongoDB 4.0 Python3.7 穩定高效的評分制IP代理池APIserver

wangjuntytl / 1095人閱讀

摘要:項目的主要運行部分,采集器驗證器打分檢測等功能實現的模塊。在中可以配置異步的并發量等來控制驗證器。調用有了穩定的高分代理數據,那么就可以掛起一個為我們的爬蟲保駕護航,這一部分可以多帶帶拿出來編寫,使用其他框架之類的都是不錯的選擇。

FooProxy

穩健高效的評分制 IP代理池 + API服務提供,可以自己插入采集器進行代理IP的爬取,支持 MongoDB 4.0 使用 Python3.7

github 地址: FooProxy
背景

因為平時爬取某些網站數據時,經常被封IP,同時網上很多的接口又不方便,免費的也少,穩定的更少,所以自己寫了一個評分制的ip代理API進行爬蟲的供給.
起初對MySQL和MongoDB進行了兼容的編寫,后來發現在高并發的情況下,MySQL并不能很好的讀寫數據,經常莫名其妙的出現死機、讀寫巨慢、緩執行等各種奇葩現象,對比MongoDB高效的數據文檔讀寫,最終還是放棄了mysql的兼容。(dev分支保留了對mysql的部分支持,如爬取評分)

環境
開發環境

PyCharm 2018.2.4 (Professional Edition)

Python 3.7

MongoDB 4.0

Windows 7 64bits

需安裝的庫

pymongo

aiohttp

flask

requests

bs4

lxml

項目目錄

APIserver

一個簡單的代理API接口服務器,使用Flask實現,可以自己按需求寫路由邏輯。這部分當然可以獨立出來寫,只是集成寫在了項目里面。

components

項目的主要運行部分,采集器、驗證器、打分檢測等功能實現的模塊。

config

其中的DBsettings是數據庫的設置,用戶名密碼之類的,以及存儲的數據庫名,還有備用有效數據庫(standby)的自定義名字和高分穩定數據庫(stable)的自定義名字。config文件是整個項目的主要參數配置,可以設置采集器采集間隔、驗證器的抓取驗證數量間隔和協程并發極值等。

const

項目的靜態配置,一般不用動的設置參數

custom

自定義模塊,可以編寫自己要增加的爬蟲采集函數到采集器中進行數據采集

log

項目日志記錄模塊配置以及日志

tools

一些工具函數

main.py

項目入口文件

基本流程

整個項目的流程其實很簡單,采集數據模塊主要是編寫代理網站的爬蟲,可以進行任意的爬蟲增減

采集數據

驗證數據

打分存儲

循環檢測

擇優剔劣

API調用

流程圖:

1.采集數據(Collector)

采集器進程是一個周期循環,使用了多線程對每一個代理網站進行數據采集,即:一個代理網站爬蟲一個線程。因為沒有數據共享,這里沒有GPL。項目內置了兩個代理數據采集爬蟲,一個是個人網站的nyloner,一個是66ip代理網站的爬蟲(在crawlers.py文件中),如果想要增加代理爬蟲,可以自己在custom目錄下的custom.py文件中進行增加刪減,只需要保證你的爬蟲返回的結果數據結構和要求的一致就好。如下:

def some_crawler_func():
    """
    自己定義的一個采集爬蟲
    約定:
        1.無參數傳入
        2.返回格式是:[":",":",...]
        3.寫完把函數名加入下面的my_crawlers列表中,如
          my_crawlers = [some_crawler_func,...]
    """
    pass

my_crawlers = []

一個數據采集爬蟲函數就是一個采集器,寫完函數在my_crawlers中加進去就可以。在config中設置一個周期時間,就可以讓爬蟲定期采集更新數據。

在采集的過程中,如果出現采集器爬蟲被封IP,可以通過自己的APIserver請求代理,然后再繼續采集,這一部分沒有寫,不過可以實現

2.驗證數據(Validator)

采集器進程和驗證器進程共享一個變量:proxyList,是一個MultiProcessing.Manger.List對象。可以在多進程中
保持共享數據的同步(理論上),采集器定期采集的代理數據可以通過proxyList實時的傳遞給驗證器進行有效性驗證,因為采集器一次傳遞的數據比較多,所以驗證器使用異步驗證,能大大提高效率,具體使用自帶的asyncio實現的.

驗證器實現基本上也是調用了一個驗證api來判斷代理的有效性,可以自己更換api實現,可在validator.py中詳細了解。在config中可以配置異步的并發量等來控制驗證器。

3.打分存儲(Rator)

打分器進程主要是與驗證器配合,當采集器采集的數據經過驗證器驗證后,確定有效,則讓打分器進行評分,中間可以加入自定義數據處理模塊,打分后直接存儲在standby數據庫,而后供本地檢測器進行周期檢測,打分器也是一個周期循環,不斷的對代理數據進行更新補充。內置在驗證器與掃描器中。打分器主要的三個函數:mark_success,mark_fail,mark_update.


mark_success 對采集器傳遞給驗證器的代理數據,驗證成功后進行一次性的評分并且存儲

mark_fail 對驗證器進行驗證,代理無效的數據進行失敗打分處理(達到刪除條件則刪除,否則扣分更新數據庫)

mark_update 對非初次打分的代理數據進行更新,即驗證有效的數據再次驗證時仍有效,則進行加分之類的數據庫更新

具體的評分步驟在下面會詳細說明,不過還有很大的提升空間,只是初步試了一下。

4.循環掃描(Scanner)

當驗證器的有效數據經過打分器存進本地standby數據庫中后,怎么保證這一次存進去的數據以后能保證調用時仍可用呢?使用掃描器周期循環檢測!掃描器會在你給定的掃描周期間隔不斷地對本地standby數據庫進行掃描驗證,無效的數據則直接刪除,有效的數據會對其得分、響應時間、驗證時間等字段進行及時的更新,保證代理數據的實時有效。

在掃描器內部其實也是有一個驗證函數來進行掃描驗證。詳見scanner.py

5.擇優剔劣(Detector)

存儲在standby數據庫中的數據經過掃描器的掃描檢測,可以保證其有效性,當是如果想要穩定的代理供給APIserver,那么必須有一個檢測器來進行挑揀代理,Detector會周期性的進行掃描standby和stable兩個數據庫,對其中符合高分穩定條件的代理存進stable數據庫,對失效的高分代理進行剔除,這些都可以在config中進行自定義配置高分穩定條件。如:

#采集器采集數據時間間隔,單位:秒
COLLECT_TIME_GAP    = 3600*1
#驗證器的最大并發量
CONCURRENCY         = 100
#驗證器一次取出多少條 抓取的 代理進行驗證
VALIDATE_AMOUNT     = 500
#驗證器驗證抓取數據頻率 : 秒/次
VALIDATE_F          = 5
#驗證器請求超時重試次數
VALIDATE_RETRY      = 5
#掃描器的最大并發協程數量
COROUTINE_MAX       = 300
#掃描器一次取出多少條 本地庫 的代理進行驗證
LOCAL_AMOUNT        = 500
#掃描器驗證本地庫頻率 : 秒/次
VALIDATE_LOCAL      = 60*1
#檢測器檢測數據庫的頻率: 秒/次
DETECT_LOCAL        = 60*1
#檢測器一次取出多少條有效庫的代理進行篩選
DETECT_AMOUNT       = 1000
#檢測器一次取出多少條高分穩定數據庫的代理進行檢測
DETECT_HIGH_AMOUNT  = 1000
#高分穩定數據庫代理數據連續多少次無效則從穩定數據庫中剔除
DELETE_COMBO        = 30
#代理IP成功率的最低要求,低于此要求均刪除,100次周期測試 0.2=20%
MIN_SUCCESS_RATE    = 0.2
#有效代理數據庫數據轉至高分穩定數據庫的成功率最低要求 0.8=80%
#以及測試總數的最低要求
STABLE_MIN_RATE     = 0.8500
STABLE_MIN_COUNT    = 100

因為是對本地數據庫的io操作,使用了異步asyncio可以大大提高效率。

6.API調用(APIserver)

有了穩定的高分代理數據,那么就可以掛起一個api server為我們的爬蟲保駕護航,這一部分可以多帶帶拿出來編寫,使用其他框架django之類的都是不錯的選擇。項目里只是為了演示使用,使用Flask進行了簡單的路由設置,因為測試爬蟲在本機,所以使用了下面幾個api而已,具體可以自己擴展。

root = "http://localhost:5000"
# 請求代理 kind為代理種類,anony為高匿,normal為透明
root+"/proxy/"
# 請求代理 直接返回一個高匿代理
root+"/proxy"

可以在apiserver.py中自己實現路由。

評分

簡單的評分可以使代理ip篩選更加簡單,其中的具體設置可以再const.settings中更改,一個代理IP數據的得分主要是:

一次請求的基礎分 score-basic :100-10x(響應時間-1)

請求成功的得分 score-success : (基礎分+測試總數x上一次分數)/(測試總數+1)+自定義成功加分數x成功率x連續成功數

請求失敗的得分 score-fail : (基礎分+測試總數x上一次分數)/(測試總數+1)-自定義失敗減分數x失敗率x連續失敗數

穩定性 stability : 得分x成功率x測試數/自定義精度

與三個變量成正比的穩定性根據得分設置可以很快的兩極化穩定與不穩定的代理,從而進行篩選。

使用

確保本機安裝MongoDB,并且下載好所有需要安裝庫,python3.7

可以先進行自定義的模式,在config中進行配置,可以運行多帶帶的模塊進行測試,如:

 #運行模式,置 1 表示運行,置 0 表示 不運行,全置 0 表示只運行 API server
  MODE = {
   "Collector" : 1,    #代理采集
   "Validator" : 1,    #驗證存儲
   "Scanner"   : 1,    #掃描本地庫
   "Detector"  : 1,    #高分檢測
 }

可以在config中的DBsettings配置好數據庫設置

按照自己需求更改評分量(const.setting中,默認不用更改)

配置后可以直接在DOS下或PyCharm等有標準stdout的環境下運行 python main.py

運行一段時間就可以看到穩定的效果

不足

穩定性沒有很好的標準判斷,不過100次測試85%以上的成功率就已經很好了

沒有編寫驗證器與API服務器的超時請求代理功能

API 服務器沒有多帶帶拿出來編寫

還沒有加入存活時間的考量

還沒接入爬蟲測試

...

效果

備用有效數據庫,開啟1.5個小時后:

高分穩定數據庫

后話

比較符合預期

經過連續6天的測試,程序運行正常

備用有效數據庫與高分穩定數據庫的同步更新誤差在5分鐘左右

只有一個數據采集爬蟲的情況下,一個小時采集一次,一次1000條數據[采集66ip代理網],8個小時內穩定的有效代理995左右,高分穩定的有200條左右,主要在于代理網站的質量

經過并發爬蟲測試,可以使用到實際項目中

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

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

相關文章

  • MongoDB 4.0 Python3.7 穩定高效評分IP代理APIserver

    摘要:項目的主要運行部分,采集器驗證器打分檢測等功能實現的模塊。在中可以配置異步的并發量等來控制驗證器。調用有了穩定的高分代理數據,那么就可以掛起一個為我們的爬蟲保駕護航,這一部分可以單獨拿出來編寫,使用其他框架之類的都是不錯的選擇。 FooProxy 穩健高效的評分制 IP代理池 + API服務提供,可以自己插入采集器進行代理IP的爬取,支持 MongoDB 4.0 使用 Python3....

    AndroidTraveler 評論0 收藏0
  • 8、web爬蟲講解2—urllib庫爬蟲—ip代理—用戶代理ip代理結合應用

    摘要:百度云搜索搜網盤淘寶券使用代理格式化,第一個參數,請求目標可能是或者對應設置初始化將代理設置成全局當使用請求時自動使用代理引入隨機模塊文件格式化注意第一個參數可能是或者,對應設置初始化將代理設置成全局當使用請求時自動使用代理請求 【百度云搜索:http://bdy.lqkweb.com】 【搜網盤:http://www.swpan.cn】 【淘寶券:http://www.tbquan....

    mrcode 評論0 收藏0
  • Kubernetes Master High Availability 高級實踐

    摘要:才云科技云開源高級工程師唐繼元受邀社群,在線分享高級實踐,介紹如何構建環境。除命令外的停止都是異常停止。 才云科技云開源高級工程師唐繼元受邀DBAplus社群,在線分享《Kubernetes Master High Availability 高級實踐》,介紹如何構建Kubernetes Master High Availability環境。 以下是分享實錄: 大家好,我是才云科技的唐繼...

    JiaXinYi 評論0 收藏0
  • 從應用到平臺 - 云服務架構演進過程

    摘要:應用的研發上線運維運營形成閉環,順利完成從對內服務到公共平臺的升級。從功能角度,只能支持靜態方式設置反向代理,然后,而平臺有服務對應的后端服務和端口是有動態調整需求。架構上是基礎組件需要進行升級,數據訪問層日志監控系統等。 介紹 ? ? ? ?MaxLeap早期是一家研發、運營移動應用和手機游戲公司,發展過程中積累了很多通用組件。這些組件很大程度幫公司在移動研發過程中節省了時間和成本,...

    LiangJ 評論0 收藏0
  • 9、web爬蟲講解2—urllib庫爬蟲—實戰爬取搜狗微信公眾號—抓包軟件安裝Fiddler4講解

    摘要:隨后,為了保險,重啟,火狐瀏覽器也重啟一下,然后開始抓的包,此時你會發現你的連接并不安全等類似提示已經消失,并且已經能夠抓包了。 【百度云搜索,搜各種資料:http://www.bdyss.com】 【搜網盤,搜各種資料:http://www.swpan.cn】 封裝模塊 #!/usr/bin/env?python #?-*-?coding:?utf-8?-*- import?urll...

    go4it 評論0 收藏0

發表評論

0條評論

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