Scrapy 里爬虫采集用代理IP:中间件与分池架构-易代理

本站 · 2026-11-01 最新资讯 13

Scrapy 项目别在 spider 里写 proxies 字典。代理IP 要下沉到下载中间件,业务代码只管解析。

一、基础中间件挂代理

pythonclass ProxyMiddleware:    def process_request(self, request, spider):
        proxy = proxy_pool.pick()
        request.meta["proxy"] = proxy.url
        request.meta["proxy_tag"] = proxy.tag

启用:

pythonDOWNLOADER_MIDDLEWARES = {    "myproj.middlewares.ProxyMiddleware": 110,
}

账密代理加头:

pythonauth = base64.b64encode(b"user:pass").decode()
request.headers["Proxy-Authorization"] = f"Basic {auth}"

二、响应与异常回写评分

pythondef process_response(self, request, response, spider):    if response.status >= 400:
        proxy_pool.mark_fail(request.meta["proxy_tag"])    else:
        proxy_pool.mark_ok(request.meta["proxy_tag"])    return responsedef process_exception(self, request, exception, spider):
    proxy_pool.mark_fail(request.meta["proxy_tag"])
    request.meta["proxy"] = proxy_pool.pick().url    return request

配合 RETRY_TIMES=3,失败自动换出口。

三、按目标站分池

python# 价格站用动态池,重点SKU用静态池if url in KEY_SKUS:
    request.meta["proxy"] = static_pool.pick()else:
    request.meta["proxy"] = dynamic_pool.pick()

中间件只做调度,不判断业务含义。分池规则放配置中心。

四、限速与 robots 前置

pythonROBOTSTXT_OBEY = TrueDOWNLOAD_DELAY = 1RANDOMIZE_DOWNLOAD_DELAY = True

代理IP 让出口分散,但请求节奏仍要像正常访问。429 自动暂停,不重试爆破。

五、渲染任务单独处理

需要浏览器渲染时,代理放下载层;无头浏览器内请求走系统代理。两层别冲突,别在中间件里同时挂两次。

爬虫采集用代理IP 在 Scrapy 里成熟做法:中间件管出口,调度器管重试,spider 只写解析。


相关标签:代理ip,ip代理,http代理,代理服务器ip,开放代理,文档中心,新闻,动态住宅ip,ip池,socks5代理

微信客服

微信客服

扫码添加客服

QQ 咨询

新用户专享 注册免费送 IP 5000个 高质量 IP 免费领取 立即领取