我正在考虑使用Tor和使用Scrapy的用户代理切换器this guide。它与该主题的其他指南类似。 Tor大约每10分钟更改一次ip地址。中间件会在每次请求时更改用户代理。
我想将用户代理更改与IP地址更改同步。为了实现这一点,我需要在Scrapy发送请求之前执行一些代码。代码将检查自上次请求以来ip是否已更改,如果是,则更改用户代理。如果ip没有改变,它将使用相同的用户代理。我无法在执行周期中的正确位置找到一种调用此代码的方法。
想要进行此更改背后的原因是,在我正在抓取的网站上,使用不同用户代理的多个请求来自同一个IP地址是不常见的。
答案 0 :(得分:1)
您必须使用Downloader Middleware
,特别声明process_request
方法,以便在发出实际请求之前处理Request
对象。
在那里,您可以声明与每个请求的代理相关联的user-agents
的词典,请记住您可以使用request.meta['proxy'] = "host:port"