Scrapy:将用户代理更改与 IP 地址更改同步

Scrapy: synchronize user-agent change with ip address change

我正在研究 this guide 使用 Tor 和 Scrapy 的用户代理切换器。它类似于有关该主题的其他指南。 Tor 大约每 10 分钟更改一次 IP 地址。中间件会根据每个请求更改用户代理。

我想将用户代理更改与 IP 地址更改同步。为此,我需要在 Scrapy 发送请求之前执行一些代码。该代码将检查 ip 自上次请求以来是否已更改,如果已更改,则更改用户代理。如果 ip 没有改变,它将使用相同的用户代理。我一直没能找到在执行周期的正确位置调用此代码的方法。

想要进行此更改的原因是,在我正在抓取的网站上,具有不同用户代理的多个请求来自同一 IP 地址是不寻常的。

您必须使用 Downloader Middleware,专门声明 process_request 方法,这样您就可以在发出实际请求之前处理 Request 对象。

在那里你可以声明一个 user-agents 的字典与每个请求的代理关联,记住你可以为每个请求指定代理 request.meta['proxy'] = "host:port"