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