如果沒有代理ip,爬蟲業務肯定沒有辦法工作,所以大部分爬蟲工作者都會購買安全穩定的代理ip。使用高質量的代理ip后,你能沒有后顧之憂嗎?不會那么容易。我們需要改進方案,有效分配資源,提高工作效率,快速、穩定、高效地完成爬蟲。
方案一。每個進程從接口API中隨機選擇一個IP列表重復使用,失敗后再調用API獲取。一般邏輯如下:
1.對于每個進程,從接口隨機檢索一批ip,反復嘗試ip目錄抓取數據;
2.如果訪問成功,繼續抓取下一個。
3.如果失敗,請從接口中取出一批IP,然后重試。
3.如果失敗,請從接口中取出一批IP,然后重試。
缺點:每個IP都有時間限制。如果抽取一百個,用第二十個,可能剩下的大部分都用不上。如果設置HTTP請求時連接時間超時為3秒,讀取時間超時為5秒,可能需要3-8秒,在這3-8秒內可能被抓取上百次。
方案二:每個進程從接口API中隨機選擇一個IP使用。如果失敗,它調用應用編程接口來獲取一個IP,一般邏輯如下:
1.每個進程從接口中隨機檢索一個ip,并使用這個ip來瀏覽資源。
2.如果訪問成功,繼續趕上下一個。
3.如果失敗,從接口中隨機選擇一個IP并繼續嘗試。
缺點:調用API獲取IP的行為非常頻繁,會給代理服務器帶來很大的壓力,影響API接口的穩定性,可能會限制抽取。這種方案不適合,不能長期穩定運行。
方案三:首先提取大量IP導入本地數據庫,從數據庫中提取IP。一般邏輯如下:
1.在數據庫中創建一個表,編寫一個導入腳本,以及每分鐘有多少個API請求將IP列表導入數據庫。
2.在數據庫中記錄imPort時間、IP、端口、過期時間、IP可用性等字段;
3.編寫一個爬行腳本,從數據庫中讀取可用的IP,每個進程從數據庫中獲取一個IP供使用。
4.進行抓取,判斷結果,處理cookie等。如果有驗證碼或者失敗,放棄這個IP,換成另一個IP。
該方案有效避免了IP代理服務器資源的消耗,有效分配了代理IP的使用,更加高效穩定,保證了爬蟲工作的持久性和穩定性。