python - 临时 Scrapy 中的用户代理轮换

标签 python web-scraping scrapy

我正在使用 Scrapy 编写一个crawlspider,并使用下载器中间件为每个请求轮换用户代理。我想知道是否有办法暂时解决这个问题。换句话说,我想知道是否可以告诉蜘蛛每 X 秒更改一次用户代理。我认为,也许使用 DOWNLOAD_DELAY 设置来执行此操作可以解决问题。

最佳答案

您的处理方式可能会有所不同。由于您可以通过 CONCURRENT_REQUESTSDOWNLOAD_DELAY 和其他相关设置控制每秒请求数的抓取速度,因此您可以只计算同一用户将连续发出多少个请求-代理 header 。

沿着这些思路(基于 scrapy-fake-useragent )(未测试):

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)

这可能不是特别准确,因为也可能存在重试和其他原因,理论上可能会搞砸计数 - 请测试一下。

关于python - 临时 Scrapy 中的用户代理轮换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32783264/

相关文章:

python - 为什么将 session 存储在服务器上而不是存储在 cookie 中?

c# - 在 c++/c# 中从哪里开始抓取/爬行?

python - 如何使用Scrapy从响应中获取XML标签中的注释?

python - 安装 scrapy vol 2.0 时出错

python - scrapy - 项目加载器 - 默认处理器

python - Pandas - 比较 2 列并根据优先级选择值

python - 无法在带有 GPU 的 tensorflow 教程中运行词嵌入示例

python - 如何在使用 django-hosts 时在 django 中重定向?

python - Python/Firefox headless 抓取脚本中的 "Failed to decode response from marionette"消息

python - 使用 soup.find() 提取特定的 html 项目