用 Scrapy 接住宅代理:meta proxy 怎么填、怎么测通

在 Scrapy 请求的 meta["proxy"] 写入控制台凭据(注意 URL 编码)。这与 requests 单次调用不同。不要把并发设置写成产品限流。不支持中国大陆。

在 Scrapy 请求的 meta["proxy"] 写入控制台凭据(注意 URL 编码)。这与 requests 单次调用不同。不要把并发设置写成产品限流。不支持中国大陆。

先从控制台复制协议、主机、端口、认证,再写进 Scrapy 请求。常见做法是在 `request.meta["proxy"]` 里放完整代理 URL,由默认开启的 `HttpProxyMiddleware` 使用。这和一次 `requests.get(..., proxies=...)` 不同:爬虫会连续发出许多请求,出口节奏取决于你买的是动态还是静态,而不是 Scrapy 自己「自动变成静态」。单次 Python 调用见用 Python 接住宅代理。

ZTProxy 提供动态住宅(按 GB)与静态住宅(按 IP·月)。示例是假占位符,不要当成生产地址。仅限授权目标。不支持中国大陆使用。

开始前备齐什么

准备项从哪里来
协议、主机、端口、认证仅控制台返回值(不用本文假占位符)
Python 与 Scrapy本机环境
测通 URL你有权访问的页面
动态或静态订单动态 vs 静态

占位符(非生产):主机 `proxy.example.invalid`,端口 `10000`,用户 `USER_EXAMPLE`,密码 `PASS_EXAMPLE_NOT_REAL`。字符串格式见代理格式,协议见HTTP / SOCKS5 配置。命令以文档快速开始为准。先用 curl 测通 确认同一组凭据可用,再开爬虫。

推荐写法:meta["proxy"]

用户名或密码含 `@`、`:` 时先做 URL 编码。不要编造用户名里的国家或会话字段。也不要默认再装一套「轮换中间件」——除非控制台或你自己的调度确实需要,且你清楚它与订单类型如何配合。

import os
from urllib.parse import quote
import scrapy

user = quote(os.environ.get("ZT_PROXY_USER", "USER_EXAMPLE"), safe="")
password = quote(os.environ.get("ZT_PROXY_PASS", "PASS_EXAMPLE_NOT_REAL"), safe="")
host = os.environ.get("ZT_PROXY_HOST", "proxy.example.invalid")
port = os.environ.get("ZT_PROXY_PORT", "10000")
PROXY = f"http://{user}:{password}@{host}:{port}"

class AuthorizedCheckSpider(scrapy.Spider):
    name = "authorized_check"

    def start_requests(self):
        yield scrapy.Request(
            "https://example.com",
            meta={"proxy": PROXY},
            callback=self.parse,
        )

    def parse(self, response):
        self.logger.info("status=%s", response.status)

`CONCURRENT_REQUESTS`、`DOWNLOAD_DELAY` 只是客户端节奏,用来降低对目标站点的压力、也避免把失败重试变成额外流量。它们不是 ZTProxy 的产品限流或 SLA,流量如何计费见按 GB 还是按 IP。SOCKS5 仅在控制台返回 SOCKS、且你使用能处理 SOCKS 的下载处理器时才需要,且不要假设提供 UDP。

会话与常见问题

连续请求在动态产品上可以看到不同出口;这不自动等于故障。需要短时同一出口时看控制台的粘性字段,需要订购期内相对固定则用静态。见粘性 ≠ 静态。

现象先检查什么
407用户名密码、URL 编码、是否漏了 `meta["proxy"]`;订单是否有效
部分请求没走代理是否只在第一条 Request 上设置了 proxy;后续 `follow` 是否丢掉 meta
超时或流量异常偏高重试是否在未成功时反复下载;先用 curl 核对凭据
地区不对订单地区;不要自造用户名语法

更完整的症状表见407 与超时排查。

合规与范围

只采集你有权访问的公开或授权目标,并遵守站点规则。不要把本页写成绕过限制的教程。价格以控制台与价格方案为准(动态约 $0.40/GB,100 TB 整包约 $0.20/GB;静态共享约 $1.50、独享约 $5 /IP/月)。USDT/USDC 可用;Visa/Mastercard 申请中。不支持中国大陆使用。

FAQ

这和 requests 那一页有什么不同?

requests 页是单次 HTTP 调用。本页处理爬虫里每条 Request 如何带上代理,以及后续请求不要丢掉 meta。

HttpProxyMiddleware 还要自己开吗?

默认通常已启用。先确认没有被你的自定义中间件关掉或覆盖。

示例主机能直接用吗?

不能。必须改成控制台返回值。

把 CONCURRENT_REQUESTS 调高,是不是就等于更高套餐?

不是。那只是客户端并发。计费与套餐以控制台为准,见按 GB 还是按 IP。

必须安装第三方轮换插件吗?

不必。先用控制台订单类型(动态或静态)和下发的凭据。不要为了「看起来在轮换」再叠一层未核实的中间件。

可以用来突破登录墙吗?

不可以。仅限合法授权目标。

复用同一代理 URL 会保持同一 IP 吗?

不一定,尤其在动态产品上。连接或 URL 复用 ≠ 静态。

价格以哪里为准?

以控制台与价格方案为准。

下一步

  1. 用 curl 测通控制台凭据。
  2. 在第一条以及后续 Request 上都带上 `meta["proxy"]`。
  3. 需要选型时打开动态或静态。