Python 在Scrapy中暂缓用户代理旋转

Python 在Scrapy中暂缓用户代理旋转,python,web-scraping,scrapy,Python,Web Scraping,Scrapy,我正在使用Scrapy编写爬行爬行器,并使用下载器中间件为每个请求轮换用户代理。我想知道的是,是否有办法暂时解决这个问题。换句话说,我想知道是否有可能让爬行器每X秒更换一次用户代理。我想,也许使用下载延迟设置来实现这一点就可以了 你可能会有点不同的做法。由于您可以通过并发请求、下载延迟和其他相关设置来控制请求/秒的爬网速度,因此您可以只计算一行中有多少请求使用相同的用户代理标头 (基于)(未经测试)大致如下: 这可能不是特别准确,因为理论上可能会有重试和其他原因导致计数错误-请测试它。这是一种聪

我正在使用Scrapy编写爬行爬行器,并使用下载器中间件为每个请求轮换用户代理。我想知道的是,是否有办法暂时解决这个问题。换句话说,我想知道是否有可能让爬行器每X秒更换一次用户代理。我想,也许使用下载延迟设置来实现这一点就可以了

你可能会有点不同的做法。由于您可以通过
并发请求
下载延迟
和其他相关设置来控制请求/秒的爬网速度,因此您可以只计算一行中有多少请求使用相同的用户代理标头

(基于)(未经测试)大致如下:


这可能不是特别准确,因为理论上可能会有重试和其他原因导致计数错误-请测试它。

这是一种聪明的方法,但我感兴趣的是秒数,而不是请求数。@Simus谢谢,根据您的设置,这两个数字实际上是相互关联的。我希望你能把这些数字联系起来,计算出要设置的请求数……我明白你在说什么了。您将如何通过编程实现这一点?我需要计算请求所需的时间。
from fake_useragent import UserAgent

class RotateUserAgentMiddleware(object):
    def __init__(self, settings):
        # let's make it configurable
        self.rotate_user_agent_freq = settings.getint('ROTATE_USER_AGENT_FREQ')

        self.ua = UserAgent()

        self.request_count = 0
        self.current_user_agent = self.ua.random

    def process_request(self, request, spider):
        if self.request_count >= self.rotate_user_agent_freq:
            self.current_user_agent = self.ua.random 
            self.request_count = 0
        else:
            self.request_count += 1

        request.headers.setdefault('User-Agent', self.current_user_agent)