
一、Scrapy代理中间件到底有啥用?
搞爬虫的兄弟应该都遇到过这种情况:刚跑几分钟程序,目标网站就给你IP封得死死的。这时候动态代理IP就是救命稻草,好比打游戏开无限复活挂,被封了自动换新马甲继续干。
Scrapy自带的代理设置太基础,应付不了复杂场景。咱们得自己写个Descargar middleware,这玩意儿就像快递公司的调度中心,能拦截每个请求,偷偷把快递员(请求)的工服(IP地址)给换了。
二、手把手造轮子:动态代理中间件
先准备个靠谱的代理池,这里用ipipgo的动态住宅代理举例。他们家的API返回格式长这样:
{
"proxy": "123.45.67.89:8888",
"expire_time": 1800
}
Una nueva.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()
三、配置文件的秘密参数
existesettings.py里激活咱们的中间件:
DOWNLOADER_MIDDLEWARES = {
'your_project.middlewares.DynamicProxyMiddleware': 543,
}
IPIPGO_API = "https://api.ipipgo.com/getProxy" 官方接口地址
Cuidado con estos dos baches:
1. 优先级数字别乱填,要比默认的HttpProxyMiddleware(750)小
2. Información sobre la acreditación记得换成ipipgo后台给的账号密码
IV. Guía para evitar errores sobre el terreno
最近帮客户部署时遇到的真实问题:
| sintomático | método resolver un problema |
|---|---|
| 连续返回407错误 | 检查Basic认证编码是否正确 |
| El tiempo de supervivencia de la PI es demasiado corto | 在API参数加&duration=600延长有效期 |
| 目标网站检测到WebDriver | 开启ipipgo的header伪装功能 |
V. Preguntas rápidas y respuestas a las preguntas más frecuentes
P: ¿Qué debo hacer si la IP de mi proxy no suele ser válida?
R: El paquete residencial dinámico de ipipgo viene con elNo conmutación automática机制,建议把API调用频率设为每秒3-5次,他们家的IP池够大,经得起折腾。
P: ¿Desaceleración repentina del rastreador?
R: Comprueba si está encendidoSOLICITUDES_CONCURRENTES并发控制,建议配合ipipgo的Optimización regional功能,把代理节点选在目标服务器所在地。
Q:需要处理CAPTCHA验证码?
R: Actívalo en la consola ipipgo智能验证码绕过服务,这个要企业版套餐才支持,普通用户建议降低请求频率。
最后说个冷知识:用动态代理别开COOKIES_ENABLED,不然网站会发现不同IP用同一套cookie,立马露馅!如果业务必须带cookie,记得搭配ipipgo的suspensión de la sesión功能,他们叫Sticky Session,能保证特定时间段内IP不变。

