proxys.store

在 Scrapy 中使用代理

HttpProxyMiddleware 默认启用——把连接字符串放进请求的 meta 即可。

最小可用的爬虫

无需额外开启任何设置:HttpProxyMiddleware 已在默认管道中,并从 meta 读取 proxy 键。账号密码直接写在地址里,与普通连接字符串一致。

import scrapy


class IpSpider(scrapy.Spider):
    name = "ip"
    proxy = "http://LOGIN__cr.de:PASSWORD@gw.dataimpulse.com:823"

    def start_requests(self):
        yield scrapy.Request(
            "https://ipinfo.io/json",
            meta={"proxy": self.proxy},
        )

    def parse(self, response):
        self.logger.info(response.text)

采集时需要注意

在端口 823 上重试会从另一个 IP 发出——这是轮换在正常工作,不是故障。Scrapy 的重试机制在这里表现正确,但任何逻辑都不能依赖请求之间 IP 不变;需要固定就用 10000–20000 的粘性端口。

DOWNLOAD_TIMEOUT 要留足余量:住宅出口比数据中心慢,没有超时的请求可能挂起数分钟。套餐允许最多两千个并发连接,普通采集远达不到这个上限。

继续阅读