Python爬蟲的一種常見技術(shù)--設(shè)置代理IP。在學(xué)習(xí)Python爬蟲的時候,經(jīng)常會遇到網(wǎng)站被抓取,而使用了反抓取技術(shù),使得爬不上去。高強度、高效率的網(wǎng)頁信息抓取往往給網(wǎng)站服務(wù)器帶來很大的壓力,同一個IP對同一個網(wǎng)頁的重復(fù)抓取很容易被封。這里是一個爬蟲技巧,設(shè)置代理IP。
動態(tài)IP模擬器
以下是免費獲取代理IP的方法簡介。這種方法的優(yōu)點是它是免費的,缺點是它在爬出后是不可用的。IP地址取自國內(nèi)IP網(wǎng)站和IP模擬器代理。如果我們在首頁上刮IP地址,或者你可以刮第一頁和第二頁,這就足夠了。
配置環(huán)境。
安裝請求庫。
安裝BS 4庫。
安裝lxml庫。
絕對代碼。
話不多說直接給代碼。
get_ip_list(url,headers)函數(shù)傳遞url和headers,最后返回一個ip列表。該列表的內(nèi)容類似于122.114.31.177:808的格式,該列表包含了國內(nèi)互聯(lián)網(wǎng)代理IP網(wǎng)站主頁上的所有IP地址和端口。
get_random_ip(ip_list)函數(shù)傳遞第一個函數(shù)獲得的列表,并返回一個隨機代理。可以將該代理傳遞給請求的get方法,這樣每次運行爬行網(wǎng)站時都可以使用不同的IP訪問爬行網(wǎng)站,有效地避免了真實IP被阻塞的風險。
代理格式是一個字典:{http:http://122.114.31.177:808'},下面的執(zhí)行也可以封裝成一個方法。
為了獲取ip,IP代理服務(wù)器會進行反抓取。如果IP經(jīng)常被捕獲,服務(wù)器將主動返回503服務(wù)不可用并提示阻止,因此您可以請求保存文件以便在請求時讀取,或者在抓取之前抓取IP數(shù)分鐘,這相當于添加計時器功能。
代理IP使用情況。
運行上述代碼將產(chǎn)生一個隨機代理,該IP代理可以直接傳遞給請求的get方法。
Res=requests.get(url,頭=頭,代理=代理)。
在這里我想提醒大家的是,免費代理IP的穩(wěn)定性還有待商榷,最好是建議如何獲取大量信息或購買代理IP。