如果不使用代理ip,爬蟲工作必定無路可行,因此大部分爬蟲工作者都會去購買安全穩定的代理ip。使用了高質量的代理ip后,會不會就能夠無后顧之憂了呢?這個可不會這么容易,還要改進方案,有效分配資源,提升工作效率,又快速又穩定又高效的完成爬蟲。
通過代理ip進行分布式爬蟲的幾種方案
方案一、每個進程從接口API中隨機取一個IP列表來反復使用,失效后再調用API獲取,大致邏輯是這樣:
1、每個進程,從接口隨機取回一批ip回來,反復試著ip目錄去抓取數據;
2、要是訪問成功,則繼續抓取下一條。
3、要是失敗了,再從接口取一批IP,繼續嘗試。
弊端:每個IP都是有期限的,要是提取了一百個,用到第二十個時,或許剩下的大多數都無法使用了。要是設置HTTP請求時連接時間超時是3秒,讀取時間超時是5秒,那么或許會耗費3-8秒的時間,在這3-8秒內可能抓取了幾百次了。
方案二:每個進程從接口API中隨機取一個IP來使用,失敗則再調用API獲取一個IP,大致邏輯如下:
1、每個進程,從接口隨機取回一個ip來,用這個ip來瀏覽資源
2、要是訪問成功,則繼續抓下一條
3、要是失敗了,再從接口隨機取一個IP,繼續嘗試
弊端:調用API獲取IP的行為非常頻繁,會對代理服務器造成特別大的壓力,影響API接口穩定,可能會被限制提取。這類方案也不適合,無法持久穩定的運行。
方案三:先提取大量IP導入本地數據庫,從數據庫里面取IP,大致邏輯如下:
1、在數據庫里面建一個表,寫一個導入腳本,每分鐘請求多少次API(咨詢代理IP服務商建議),把IP列表導入到數據庫里面。
2、在數據庫里面記錄好導入時間、IP、Port、過期時間、IP可用狀態 等字段;
3、寫一個抓取腳本,抓取腳本從數據庫里面讀取可用IP,每個進程從數據庫獲取一個IP進行使用。
4、執行抓取,對結果進行判斷,處理cookie等,只要出現驗證碼或者失敗就放棄這個IP,重新換一個IP。
這種方案有效的避開了代理服務器資源的消耗,有效的分配代理IP的使用,更加的高效和穩定,保障了爬蟲工作的持久性和穩定性。極光ip代理穩定可靠,親測好用的喲,建議大家可以測試一下。