爬蟲工作者最頭疼的問題就是IP被封——辛苦寫好的代碼剛跑幾分鐘就被目標(biāo)網(wǎng)站拉黑。作為專注代理服務(wù)7年的技術(shù)團(tuán)隊,我們整理了這套可直接落地的防封方案,用真實(shí)代碼教你如何通過代理IP實(shí)現(xiàn)穩(wěn)定數(shù)據(jù)采集。
一、為什么代理IP是防封剛需
當(dāng)爬蟲連續(xù)用同一個IP訪問網(wǎng)站時,就像用喇叭大喊"我是機(jī)器人",觸發(fā)反爬機(jī)制是必然的。代理IP相當(dāng)于給爬蟲戴上面具,每次請求更換不同IP地址,讓目標(biāo)網(wǎng)站以為是多個真實(shí)用戶在瀏覽。
這里有個真實(shí)案例:某電商平臺每小時限制同一IP訪問200次。使用天啟代理的輪換IP池后,單日采集量從3萬條提升到80萬條,且穩(wěn)定運(yùn)行30天無封禁。
二、Requests設(shè)置代理(含實(shí)戰(zhàn)代碼)
在Requests中設(shè)置代理只需要3步:
# 從天啟代理API獲取IP(此處替換為真實(shí)API地址) import requests def get_proxy(): res = requests.get("https://api.tianqiip.com/get?type=http") return res.json()['ip'] + ':' + res.json()['port'] # 請求時動態(tài)添加代理 url = 'https://target-site.com' proxy = {'http': f'http://{get_proxy()}'} response = requests.get(url, proxies=proxy, timeout=10)
關(guān)鍵技巧:
每次請求更換新IP(天啟API支持自動切換)
設(shè)置超時參數(shù)避免卡死
異常處理自動重試(推薦3次重試)
三、Scrapy防封配置方案
Scrapy需要自定義中間件實(shí)現(xiàn)IP輪換。在middlewares.py中添加:
import random from tianqi_proxy import get_proxy # 天啟代理SDK class ProxyMiddleware(object): def process_request(self, request, spider): request.meta['proxy'] = get_proxy() # 天啟代理自動鑒權(quán),無需額外配置
在settings.py中啟用中間件:
DOWNLOADER_MIDDLEWARES = { 'your_project.middlewares.ProxyMiddleware': 543, }
四、代理池管理核心技巧
自建代理池 | 天啟代理方案 |
---|---|
需自行驗證IP可用性 | 提供存活檢測接口 |
維護(hù)成本高 | API自動獲取可用IP |
IP質(zhì)量不穩(wěn)定 | 運(yùn)營商級靜態(tài)IP資源 |
推薦直接使用天啟代理的智能調(diào)度接口,相比自建代理池節(jié)省90%維護(hù)時間。其IP存活率≥99%,每個IP可重復(fù)使用5分鐘,適合長期爬蟲項目。
五、防封必做的三件事
1. 請求頻率控制
即使使用代理,單個IP訪問間隔建議>3秒。可在Scrapy中設(shè)置:
DOWNLOAD_DELAY = 3
2. 請求頭偽裝
每次請求隨機(jī)更換User-Agent:
from fake_useragent import UserAgent headers = {'User-Agent': UserAgent().random}
3. 異常監(jiān)控
當(dāng)出現(xiàn)403/504狀態(tài)碼時,立即切換IP并記錄異常:
if response.status in [403, 504]: spider.logger.warning(f'封禁報警:{response.url}') return request.replace(dont_filter=True)
六、常見問題解答
Q:代理IP用幾次就失效?
A:免費(fèi)代理普遍存在此問題。建議選擇天啟代理的企業(yè)級靜態(tài)IP,單個IP可用時長>5分鐘,支持并發(fā)請求。
Q:如何測試代理是否有效?
A:用這個檢測腳本:
import requests proxy = {'http': 'ip:port'} try: r = requests.get('http://httpbin.org/ip', proxies=proxy, timeout=5) print(f'成功!當(dāng)前IP:{r.json()["origin"]}') except: print('代理失效')
Q:遇到驗證碼怎么辦?
A:天啟代理提供高匿IP池,配合Selenium自動化可降低驗證碼觸發(fā)率。重度反爬網(wǎng)站建議采用人機(jī)驗證解決方案。
選擇專業(yè)代理服務(wù)是爬蟲成功的核心。天啟代理作為運(yùn)營商直連服務(wù)商,提供全國200+城市節(jié)點(diǎn)、10毫秒超低延遲的穩(wěn)定代理服務(wù),現(xiàn)在注冊可領(lǐng)5000次免費(fèi)試用,專業(yè)技術(shù)團(tuán)隊支持7x24小時響應(yīng)。