Python爬蟲常用的技巧——設(shè)置代理IP?在學(xué)習(xí)Python爬蟲時,經(jīng)常會遇到要爬的網(wǎng)站,采用了反爬技術(shù),導(dǎo)致爬不上去。網(wǎng)頁信息的高強(qiáng)度、高效率抓取往往會給網(wǎng)站服務(wù)器帶來很大壓力,所以同一個IP重復(fù)抓取同一個網(wǎng)頁,很可能會被屏蔽。這里有一個爬蟲技能,設(shè)置代理IP。
下面簡單介紹一下免費獲取代理IP的方法。這種方法的優(yōu)點是免費,缺點是爬出來后不可用的多。
IP地址取自國內(nèi)IP網(wǎng)站和IP模擬器代理。如果我們抓取主頁上的IP地址,或者你可以抓取第一頁和第二頁,一般用途就足夠了。
配置環(huán)境
安裝請求庫
安裝bs4庫
安裝lxml庫
絕對代碼
不多說直接上代碼。
動態(tài)IP模擬器
get_ip_list(url,headers)函數(shù)傳入url和頭,最后返回一個ip列表。該列表的元素類似于122.114.31.177:808格式,該列表包括國內(nèi)互聯(lián)網(wǎng)代理IP網(wǎng)站主頁上的所有IP地址和端口。
get_random_ip(ip_list)函數(shù)傳入由第一個函數(shù)獲得的列表,并返回一個隨機(jī)代理。這個代理可以傳入requests的get方法,這樣你每次運行都可以使用不同的IP訪問抓取的網(wǎng)站,有效避免真實IP被屏蔽的風(fēng)險。
代理的格式是字典:{ ' http ':' http://122 . 114 . 31 . 177:808 ' },下面的執(zhí)行也可以封裝成方法。
為了抓取ip,Rhino代理服務(wù)器做了反抓取。如果頻繁抓取IP,服務(wù)器會主動返回503服務(wù)不可用并提示阻止,所以在請求時可以先請求保存一個文件進(jìn)行讀取,或者抓取一個IP幾分鐘后再抓取,相當(dāng)于增加了一個定時功能。
代理IP的使用
運行上面的代碼會得到一個隨機(jī)的代理,它可以直接傳遞給請求的get方法。
res = requests.get(url,headers=headers,proxies = proxies)
這里要提醒大家的是,免費代理IP的穩(wěn)定性還是需要討論的。不如建議如何抓取大量信息或者買一些代理IP。