代理IP池如何維護(hù)
在爬取數(shù)據(jù)的時(shí)候,遇到了IP被封殺的情況。為了順利開展工作,會選用代理IP,以下分享爬蟲工作經(jīng)驗(yàn),全球HTTP對代理IP池的維護(hù)提供一些見解。

在使用代理ip之前,需要先了解:
一:對返回ip格式的操作
json格式的數(shù)據(jù)可以直接請求后返回json數(shù)據(jù)進(jìn)行操作包過提取,刪除,增加。當(dāng)然,在實(shí)際使用ip代理的時(shí)候好先在瀏覽器中請求一次,復(fù)制下來新建一個py文件練習(xí)對其操作。
二:ip的有效期
現(xiàn)在大部分的ip代理都是有有效期的,1-5分鐘的有效期當(dāng)ip失效后你需要將此ip從ip池中刪除。當(dāng)ip不夠的時(shí)候又要引入新的ip添加到當(dāng)前的ip池中。要動態(tài)維護(hù)ip池。
三:python3使用代理ip的方式
以前我的python3使用代理ip也有格式,你爬取的是http用http,是https用https就行。
四:異常處理
再寫爬蟲的時(shí)候一定要對所有可能產(chǎn)生異常的操作進(jìn)行try except的異常處理。異常又要注意是否為超時(shí)異常,還是ip不可用,過期的異常,還是操作dom樹的時(shí)候產(chǎn)生的異常。不同的異常要采用不同的策略。(可用狀態(tài)碼,全局變量判斷)。
五:分析目標(biāo)網(wǎng)站對ip的需求
你需要設(shè)置ip池的小和請求ip的個數(shù)不至于太大或太小,可以預(yù)先測試。打個比方你爬的網(wǎng)站同一個時(shí)段10個ip更換就不夠了。你不至于開100個ip去爬吧,ip過期而沒咋么用就是對資源的浪費(fèi)。
解決方向:
先寫個小程序操作返回的json數(shù)據(jù)測試。
設(shè)置全局的列表ipdate[],全局的一個msg{}字典(其實(shí)字典就是列表中隨機(jī)選的一個ip和端口,只不過通過記錄標(biāo)記可以很好的進(jìn)行刪除操作)。
將請求ip的操作添加到全局列表(數(shù)組)中寫成一個loadip()函數(shù),以便判斷ip不夠時(shí)候即使添加(列表extend方法了解下,不是append)。
寫一個隨機(jī)選ip的函數(shù)getproxies(),更換proxies{}里面的內(nèi)容。同時(shí)msg也要更換。注意python函數(shù)改變?nèi)肿兞啃枰诤瘮?shù)里先global msg聲明。每次進(jìn)行http(s)請求前執(zhí)行一次更新操作。
所有的操作都在try excpet操作,對不同的異常采用不同處理。比如(有的因?yàn)閕p異常沒爬到需要從爬,而有的因?yàn)閐om結(jié)構(gòu)異常就需要跳過)。
當(dāng)然實(shí)際處理可能會遇到各種問題,比如頁面跳轉(zhuǎn)重定向,ssl證書,有的網(wǎng)站也會卡瀏覽器名稱,或者cookie。這里不做過多介紹了。