如果對(duì)于網(wǎng)絡(luò)爬蟲還是比較新接觸的用戶,可能不太明白這是什么意思。在瀏覽一些爬蟲技術(shù)網(wǎng)站的時(shí)候,ip代理池這個(gè)詞出現(xiàn)的頻率很高,下面ip代理通過代理池的設(shè)計(jì)流程,來給大家分解介紹。
IP海代理池設(shè)計(jì)教程:
代理池由四部分組成:
ProxyGetter:
代理獲取接口,網(wǎng)上找到免費(fèi)IP的提供商,每調(diào)用一次就會(huì)抓取網(wǎng)站的最新代理放入DB,可自行添加額外的代理獲取接口;
DB:
用于存放ip代理,現(xiàn)在暫時(shí)只支持SSDB。至于為什么選擇SSDB,大家可以參考這篇文章,個(gè)人覺得SSDB是個(gè)不錯(cuò)的Redis替代方案,如果你沒有用過SSDB,安裝起來也很簡單。
Schedule:
計(jì)劃任務(wù)用戶定時(shí)去檢測DB中的代理可用性,刪除不可用的代理。同時(shí)也會(huì)主動(dòng)通過ProxyGetter去獲取最新代理放入DB。
ProxyApi:
代理池的外部接口,由于現(xiàn)在這么代理池功能比較簡單,花兩個(gè)小時(shí)看了下Flask,愉快的決定用Flask搞定。功能是給爬蟲提供get/delete/refresh等接口,方便爬蟲直接使用。
到了代碼模塊:
Python中高層次的數(shù)據(jù)結(jié)構(gòu),動(dòng)態(tài)類型和動(dòng)態(tài)綁定,使得它非常適合于快速應(yīng)用開發(fā),也適合于作為膠水語言連接已有的軟件部件。用Python來搞這個(gè)ip代理池也很簡單,代碼分為6個(gè)模塊:
Api:
api接口相關(guān)代碼,目前api是由Flask實(shí)現(xiàn),代碼也非常簡單??蛻舳苏?qǐng)求傳給Flask,F(xiàn)lask調(diào)用ProxyManager中的實(shí)現(xiàn),包括get/delete/refresh/get_all。
Manager:
get/delete/refresh/get_all等接口的具體實(shí)現(xiàn)類,目前代理池只負(fù)責(zé)管理proxy,日后可能會(huì)有更多功能,比如代理和爬蟲的綁定,代理和賬號(hào)的綁定等等。
DB:
數(shù)據(jù)庫相關(guān)代碼,目前數(shù)據(jù)庫是采用SSDB。代碼用工廠模式實(shí)現(xiàn),方便日后擴(kuò)展其他類型數(shù)據(jù)庫。
Schedule:
定時(shí)任務(wù)相關(guān)代碼,現(xiàn)在只是實(shí)現(xiàn)定時(shí)去刷新代碼,并驗(yàn)證可用代理,采用多進(jìn)程方式。
ProxyGetter:
代理獲取的相關(guān)代碼,目前抓取了快代理、代理66、有代理、西刺代理、guobanjia這個(gè)五個(gè)網(wǎng)站的免費(fèi)代理,經(jīng)測試這個(gè)5個(gè)網(wǎng)站每天更新的可用代理只有六七十個(gè),當(dāng)然也支持自己擴(kuò)展代理接口。
Util:
存放一些公共的模塊方法或函數(shù),包含GetConfig:讀取配置文件config.ini的類,ConfigParse:集成重寫ConfigParser的類,使其對(duì)大小寫敏感,Singleton:實(shí)現(xiàn)單例,LazyProperty:實(shí)現(xiàn)類屬性惰性計(jì)算。
其他文件:
配置文件:Config.ini,數(shù)據(jù)庫配置和代理獲取接口配置,可以在GetFreeProxy中添加新的代理獲取方法,并在Config.ini中注冊(cè)即可使用。
上面就是ip代理池的組成部分,這樣分解之后,相信大家也能夠直觀認(rèn)識(shí)到代理池了。當(dāng)然了,大家也可以直接用付費(fèi)ip代理提取搭建。
版權(quán)聲明:本文為IP海(iphai.cn)原創(chuàng)作品,未經(jīng)許可,禁止轉(zhuǎn)載!
Copyright © www.wibm.ac.cn. All Rights Reserved. IP海 版權(quán)所有.
IP海僅提供中國內(nèi)IP加速服務(wù),無法跨境聯(lián)網(wǎng),用戶應(yīng)遵守《服務(wù)條款》內(nèi)容,嚴(yán)禁用戶使用IP海從事任何違法犯罪行為。
鄂ICP備19030659號(hào)-3
鄂公網(wǎng)安備42100302000141號(hào)
計(jì)算機(jī)軟件著作權(quán)證
ICP/EDI許可證:鄂B2-20200106