爬蟲ip代理池搭建前需解決的問題及搭建思路

在公司做分佈式深網爬蟲,搭建了一套穩定的代理池服務,爲上千個爬蟲提供有效的代理,保證各個爬蟲拿到的都是對應網站有效的代理IP,從而保證爬蟲快速穩定的運行,當然在公司做的東西不能開源出來。不過呢,閒暇時間手癢,所以就想利用一些免費的資源搞一個簡單的代理池服務。

1、問題

代理IP從何而來?

剛自學爬蟲的時候沒有代理IP就去西刺、快代理之類有免費代理的網站去爬,還是有個別代理能用。當然,如果你有更好的代理接口也可以自己接入。
免費代理的採集也很簡單,無非就是:訪問頁面頁面 —> 正則/xpath提取 —> 保存

如何保證代理質量?

可以肯定免費的代理IP大部分都是不能用的,不然別人爲什麼還提供付費的(不過事實是很多代理商的付費IP也不穩定,也有很多是不能用)。所以採集回來的代理IP不能直接使用,可以寫檢測程序不斷的去用這些代理訪問一個穩定的網站,看是否可以正常使用。這個過程可以使用多線程或異步的方式,因爲檢測代理是個很慢的過程。

採集回來的代理如何存儲?

這裏不得不推薦一個高性能支持多種數據結構的NoSQL數據庫SSDB,用於代理Redis。支持隊列、hash、set、k-v對,支持T級別數據。是做分佈式爬蟲很好中間存儲工具。

如何讓爬蟲更簡單的使用這些代理?

答案肯定是做成服務咯,python有這麼多的web框架,隨便拿一個來寫個api供爬蟲調用。這樣有很多好處,比如:當爬蟲發現代理不能使用可以主動通過api去delete代理IP,當爬蟲發現代理池IP不夠用時可以主動去refresh代理池。這樣比檢測程序更加靠譜。

2、代理池設計

代理池由四部分組成:

ProxyGetter:

代理獲取接口,目前有5個免費代理源,每調用一次就會抓取這個5個網站的最新代理放入DB,可自行添加額外的代理獲取接口;

DB:

用於存放代理IP,現在暫時只支持SSDB。至於爲什麼選擇SSDB,大家可以參考這篇文章,個人覺得SSDB是個不錯的Redis替代方案,如果你沒有用過SSDB,安裝起來也很簡單,可以參考這裏;

Schedule:

計劃任務用戶定時去檢測DB中的代理可用性,刪除不可用的代理。同時也會主動通過ProxyGetter去獲取最新代理放入DB;

ProxyApi:

代理池的外部接口,由於現在這麼代理池功能比較簡單,花兩個小時看了下Flask,愉快的決定用Flask搞定。功能是給爬蟲提供get/delete/refresh等接口,方便爬蟲直接使用。
爬蟲ip代理池搭建前需解決的問題及搭建思路

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章