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