随机化用户代理(user agents)

您使用的用户代理会影响您的抓取工具的成功。 有些网站会断然拒绝向特定用户代理提供内容。 这可能是因为用户代理被识别为被禁止的抓取工具,或者用户代理适用于不受支持的浏览器(即 Internet Explorer 6)。

控制抓取器的另一个原因是 Web 服务器可能会根据指定的用户代理以不同的方式呈现内容。 目前这对于移动网站来说很常见,但它也可以用于桌面,例如为旧版浏览器提供更简单的内容。

因此,将用户代理设置为默认值以外的其他值可能会很有用。 Scrapy 默认使用名为 scrapybot 的用户代理。 这可以通过使用 BOT_NAME 参数进行配置。 如果您使用 Scrapy 项目,Scrapy 会将代理设置为您的项目名称。

对于更复杂的方案,可以使用两种流行的扩展:scrapy-fake-agent 和 scrapy-random-useragent。

如何做

我们按如下方式继续示例:

  1. scrapy-fake-useragent 可在 GitHub 上获得,网址为: https://github.com/alecxe/scrapy-fake-useragent, 而 scrapy-random-useragent 则可在 https://github.com/cnu/scrapy-random-useragent 上获得。 您可以使用 pip install scrapy-fake-agent 和/或 pip install scrapy-random-useragent 包含它们。(scrapy-fake-useragent更新,推荐使用)

  2. scrapy-random-useragent 将为文件中的每个请求选择一个随机用户代理。 它配置为两种设置:

    DOWNLOADER_MIDDLEWARES = {
        'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None,
        'random_useragent.RandomUserAgentMiddleware': 400
    }
  3. 这会禁用现有的 UserAgentMiddleware,并将其替换为 RandomUserAgentMiddleware 中提供的实现。 然后,配置对包含用户代理名称列表的文件的引用:

    USER_AGENT_LIST = "/path/to/useragents.txt"
  4. 配置完成后,每个请求都将使用文件中的随机用户代理。

  5. scrapy-fake-useragent 使用不同的模型。 它从在线数据库检索用户代理,跟踪最常用的用户代理。 配置 Scrapy 的使用是通过以下设置完成的:

    DOWNLOADER_MIDDLEWARES = {
        'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
        'scrapy_fake_useragent.middleware.RandomUserAgentMiddleware': 400,
    }
  6. 它还能够将所使用的用户代理类型设置为移动或桌面等值,以强制选择这两个类别中的用户代理。 这是使用 RANDOM_UA_TYPE 设置执行的,默认为随机。

  7. 如果将 scrapy-fake-useragent 与任何代理中间件一起使用,那么您可能需要对每个代理进行随机化。 这可以通过将 RANDOM_UA_PER_PROXY 设置为 True 来完成。 另外,您需要将 RandomUserAgentMiddleware 的优先级设置为大于 scrapy-proxies,以便在处理代理之前设置代理。