如果你在爬蟲過程中有遇到“您的請求太過頻繁,請稍后再試”,或者說代碼完全正確,可是爬蟲過程中突然就訪問不了,那么恭喜你,你的爬蟲被對方識破了,輕則給予友好提示警告,嚴(yán)重的可能會(huì)對你的ip進(jìn)行封禁,所以代理ip那就尤為重要了。今天我們就來談一下代理IP,去解決爬蟲被封的問題。
網(wǎng)上有許多代理ip,免費(fèi)的、付費(fèi)的。大多數(shù)公司爬蟲會(huì)買這些專業(yè)版,對于普通人來說,免費(fèi)的基本滿足我們需要了,不過免費(fèi)有一個(gè)弊端,時(shí)效性不強(qiáng),不穩(wěn)定,所以我們就需要對采集的ip進(jìn)行一個(gè)簡單的驗(yàn)證。
1.目標(biāo)采集
本文主要針對西刺代理,這個(gè)網(wǎng)站很早之前用過,不過那個(gè)時(shí)候它還提供免費(fèi)的api,現(xiàn)在api暫不提供了,我們就寫個(gè)簡單的爬蟲去采集。
打開西刺代理,有幾個(gè)頁面,果斷選擇高匿代理。
Chrome瀏覽器右鍵檢查查看network,不難發(fā)現(xiàn),每個(gè)ip地址都在td標(biāo)簽中,對于我們來說就簡單許多了,初步的想法就是獲取所有的ip,然后校驗(yàn)可用性,不可用就剔除。
定義匹配規(guī)則
importreip_compile=re.compile(r'
2.校驗(yàn) 這里我使用淘寶ip地址庫檢驗(yàn)可用性
目前提供的服務(wù)包括:1. 根據(jù)用戶提供的IP地址,快速查詢出該IP地址所在的地理信息和地理相關(guān)的信息,包括國家、省、市和運(yùn)營商。2. 用戶可以根據(jù)自己所在的位置和使用的IP地址更新我們的服務(wù)內(nèi)容。我們的優(yōu)勢:1. 提供國家、省、市、縣、運(yùn)營商全方位信息,信息維度廣,格式規(guī)范。2. 提供完善的統(tǒng)計(jì)分析報(bào)表,省準(zhǔn)確度超過99.8%,市準(zhǔn)確度超過96.8%,數(shù)據(jù)質(zhì)量有保障。
2.2、接口說明
請求接口(GET):http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字符串]例:http://ip.taobao.com/service/getIpInfo2.php?ip=111.177.181.44
響應(yīng)信息:(json格式的)國家 、?。ㄗ灾螀^(qū)或直轄市)、市(縣)、運(yùn)營商
返回?cái)?shù)據(jù)格式:
{"code":0,"data":{"ip":"210.75.225.254","country":"u4e2du56fd","area":"u534eu5317","region":"u5317u4eacu5e02","city":"u5317u4eacu5e02","county":"","isp":"u7535u4fe1","country_id":"86","area_id":"100000","region_id":"110000","city_id":"110000","county_id":"-1","isp_id":"100017"}}
其中code的值的含義為,0:成功,1:失敗。
注意:為了保障服務(wù)正常運(yùn)行,每個(gè)用戶的訪問頻率需小于10qps。我們先通過瀏覽器測試一下
輸入地址http://ip.taobao.com/service/getIpInfo2.php?ip=111.177.181.44
再次輸入一個(gè)地址http://ip.taobao.com/service/getIpInfo2.php?ip=112.85.168.98
代碼操作
importrequestscheck_api="http://ip.taobao.com/service/getIpInfo2.php?ip="api=check_api+iptry:response=requests.get(url=api,headers=api_headers,timeout=2)print("ip:%s 可用"%ip)exceptExceptionase:print("此ip %s 已失效:%s"%(ip,e))
3.代碼
代碼中加入了異常處理,其實(shí)自己手寫的demo寫不寫異常處理都可以,但是為了方便其他人調(diào)試,建議在可能出現(xiàn)異常的地方加入異常處理。
importrequestsimportreimportrandomfrombs4importBeautifulSoupua_list=[ "Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/72.0.3626.109Safari/537.36", "Mozilla/5.0(X11;Linuxx86_64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/62.0.3202.75Safari/537.36", "Mozilla/5.0(Macintosh;IntelMacOSX10_13_6)AppleWebKit/537.36(KHTML,likeGecko)Chrome/72.0.3626.119Safari/537.36", "Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/45.0.2454.101Safari/537.36" ]defip_parse_xici(page):""":param page:采集的頁數(shù):return:""" ip_list=[] forpginrange(1,int(page)): url='http://www.xicidaili.com/nn/'+str(pg) user_agent=random.choice(ua_list) my_headers={ 'Accept':'text/html,application/xhtml+xml,application/xml;', 'Accept-Encoding':'gzip,deflate,sdch', 'Accept-Language':'zh-CN,zh;q=0.8', 'Referer':'http://www.xicidaili.com/nn', 'User-Agent':user_agent } try: r=requests.get(url,headers=my_headers) soup=BeautifulSoup(r.text,'html.parser') exceptrequests.exceptions.ConnectionError: print('ConnectionError') else: data=soup.find_all('td') #定義IP和端口Pattern規(guī)則 ip_compile=re.compile(r'
運(yùn)行代碼:
日志
4.為你的爬蟲加入代理ip
建議大家可以把采集的ip存入數(shù)據(jù)庫,這樣每次爬蟲的時(shí)候直接調(diào)用即可,順便提一下代碼中怎么加入代理ip。
importrequestsurl='www.baidu.com'headers={ "User-Agent":"Mozilla/5.0(Macintosh; IntelMacOSX10_13_6)AppleWebKit/537.36(KHTML, likeGecko)Chrome/72.0.3626.119Safari/537.36",}proxies={ "http":"http://111.177.181.44:9999", #"https":"https://111.177.181.44:9999", } res=requests.get(url=url,headers=headers,proxies=proxies)
好了,媽媽再也不擔(dān)心我爬蟲被封了,代碼可從文中復(fù)制粘貼。
-
IP
+關(guān)注
關(guān)注
5文章
1716瀏覽量
149891 -
代碼
+關(guān)注
關(guān)注
30文章
4823瀏覽量
68964 -
爬蟲
+關(guān)注
關(guān)注
0文章
82瀏覽量
6987
原文標(biāo)題:聽說你的爬蟲被封了?
文章出處:【微信號:atleadai,微信公眾號:LeadAI OpenLab】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論