沒有代理IP的幫助爬蟲工做將止步不前,因此不少爬蟲工程師都須要高效穩定的代理IP。用優質代理IP後,是否是就能夠放心爬取了呢?其實,還須要優化方案,合理分配資源,提升工做效率,更高效更快速更穩定的進行爬蟲工做。那麼ipidea全球http總結出幾種方案的並講述其中的優缺點。數據庫
方案1、每一個進程從接口中隨機取一個IP列表(好比一次提取100個IP)來循環使用,失敗則再調用API獲取,大概邏輯以下:服務器
一、每一個進程(或線程),從接口隨機取回一批IP回來,循環嘗試IP列表去抓取數據;cookie
二、若是訪問成功,則繼續抓取下一條。ide
三、若是失敗了(好比超時、出現驗證碼等),再從接口取一批IP,繼續嘗試。優化
方案缺點:每一個IP都是有有效期的,若是提取了100個,當使用了第10個的時候,可能後面的大部分都失效了。若是你設置HTTP請求的時候鏈接時間超時爲3秒,讀取時間超時爲5秒,那你將會有可能浪費幾秒的時間,說不定這幾秒內已經能夠抓取幾十次了。idea
方案二:每一個進程從接口中隨機取一個IP來使用,失敗則再調用獲取一個IP,大概邏輯以下:spa
一、每一個進程(或線程),從接口隨機取回一個IP來,用這個IP去訪問資源,.net
二、若是訪問成功,則繼續抓下一條。線程
三、若是失敗了(好比超時、出現驗證碼等),再從接口隨機取一個IP,繼續嘗試。代理
方案缺點:調用獲取IP的行爲很是頻繁,會對代理服務器形成很是大的壓力,影響API接口穩定,可能會被限制提取。這種方案也不適合,不能持久穩定的運行。
方案三:先提取大量IP導入本地數據庫,從數據庫裏面取IP,大概邏輯以下:
一、在數據庫裏面建一個表,寫一個導入腳本,每分鐘請求多少次API(諮詢代理IP服務商建議),把IP列表導入到數據庫裏面。
二、在數據庫裏面記錄好 導入時間、IP、Port、過時時間、IP可用狀態等字段;
三、寫一個抓取腳本,抓取腳本從數據庫裏面讀取可用IP,每一個進程從數據庫獲取一個IP進行使用。
四、執行抓取,對結果進行判斷,處理cookie等,只要出現驗證碼或者失敗就放棄這個IP,從新換一個IP。
這種方案有效的避開了代理服務器資源的消耗,有效的分配代理IP的使用,更加的高效和穩定,保障了爬蟲工做的持久性和穩定性。