
一、Scrapy代理中间件到底有啥用?
搞爬虫的兄弟应该都遇到过这种情况:刚跑几分钟程序,目标网站就给你IP封得死死的。这时候动态代理IP就是救命稻草,好比打游戏开无限复活挂,被封了自动换新马甲继续干。
Scrapy自带的代理设置太基础,应付不了复杂场景。咱们得自己写个Télécharger le logiciel médiateur,这玩意儿就像快递公司的调度中心,能拦截每个请求,偷偷把快递员(请求)的工服(IP地址)给换了。
二、手把手造轮子:动态代理中间件
先准备个靠谱的代理池,这里用ipipgo的动态住宅代理举例。他们家的API返回格式长这样:
{
"proxy": "123.45.67.89:8888",
"expire_time": 1800
}
Un nouveau.middlewares.py文件,核心代码也就20行:
import random
import requests
from scrapy import signals
class DynamicProxyMiddleware:
def __init__(self, api_url):
self.api = api_url + "?apikey=YOUR_API_KEY"
@classmethod
def from_crawler(cls, crawler):
return cls(
api_url=crawler.settings.get('IPIPGO_API')
)
def process_request(self, request, spider):
捞个新鲜IP
resp = requests.get(self.api)
proxy = f"http://{resp.json()['proxy']}"
重要!设置认证信息
request.meta['proxy'] = proxy
request.headers['Proxy-Authorization'] = 'Basic ' + base64.b64encode(b'username:password').decode()
三、配置文件的秘密参数
existentsettings.py里激活咱们的中间件:
DOWNLOADER_MIDDLEWARES = {
'your_project.middlewares.DynamicProxyMiddleware': 543,
}
IPIPGO_API = "https://api.ipipgo.com/getProxy" 官方接口地址
Attention à ces deux nids-de-poule :
1. 优先级数字别乱填,要比默认的HttpProxyMiddleware(750)小
2. les informations relatives à l'accréditation记得换成ipipgo后台给的账号密码
IV. guide pour éviter les pièges sur le terrain
最近帮客户部署时遇到的真实问题:
| symptomatique | méthode régler un problème |
|---|---|
| 连续返回407错误 | 检查Basic认证编码是否正确 |
| La durée de survie d'un IP est trop courte | 在API参数加&duration=600延长有效期 |
| 目标网站检测到WebDriver | 开启ipipgo的header伪装功能 |
V. Questions rapides et réponses aux questions fréquemment posées
Q : Que dois-je faire si l'adresse IP de mon proxy est souvent invalide ?
R : L'offre résidentielle dynamique d'ipipgo comprend les éléments suivantsAbsence de commutation automatique机制,建议把API调用频率设为每秒3-5次,他们家的IP池够大,经得起折腾。
Q : Ralentissement soudain du crawler ?
A:检查是否开了DEMANDES_CONCURRENTES并发控制,建议配合ipipgo的Optimisation régionale功能,把代理节点选在目标服务器所在地。
Q:需要处理CAPTCHA验证码?
R : L'activer dans la console ipipgo智能验证码绕过服务,这个要企业版套餐才支持,普通用户建议降低请求频率。
最后说个冷知识:用动态代理别开COOKIES_ENABLED,不然网站会发现不同IP用同一套cookie,立马露馅!如果业务必须带cookie,记得搭配ipipgo的maintien de la session功能,他们叫Sticky Session,能保证特定时间段内IP不变。

