使用可识别的用户代理

如果您违反服务条款并被网站所有者标记会发生什么? 您如何帮助网站所有者与您联系,以便他们可以很好地要求您退回到他们认为合理的抓取水平?

为了促进这一点,您可以做的就是在请求的 User-Agent 标头中添加有关您自己的信息。 我们在 robots.txt 文件中看到了这样的示例,例如来自 amazon.com 的文件。 在他们的 robots.txt 中,明确声明了 Google 的用户代理:GoogleBot。

在抓取过程中,您可以将自己的信息嵌入到 HTTP 请求的 User-Agent 标头中。 为了礼貌起见,您可以输入 “MyCompany-MyCrawler (mybot@mycompany.com)”等内容。 远程服务器如果对您进行违规标记,肯定会捕获此信息,如果这样提供,它为他们提供了一种方便的方式来联系您,而不仅仅是关闭您。

如何做

设置用户代理会有所不同,具体取决于您使用的工具。 最终,它只是确保将 User-Agent 标头设置为您指定的字符串。 当使用浏览器时,这通常由浏览器设置以识别浏览器和操作系统。 但您可以将任何您想要的内容放入此标头中。 使用请求时,非常简单:

url = 'https://api.github.com/some/endpoint'
headers = {'user-agent': 'MyCompany-MyCrawler (mybot@mycompany.com)'}
r = requests.get(url, headers=headers)

使用 Scrapy 时,就像配置一个设置一样简单:

process = CrawlerProcess({
    'USER_AGENT': 'MyCompany-MyCrawler (mybot@mycompany.com)'
})
process.crawl(Spider)
process.start()

工作原理

传出 HTTP 请求有许多不同的标头。 这些可确保针对目标 Web 服务器发出的所有请求将 UserAgent 标头设置为此值。

还有更多

虽然可以在 User-Agent 标头中设置您想要的任何内容,但某些 Web 服务器将检查 User-Agent 标头并根据内容决定如何响应。 一个常见的示例是使用标头来识别移动设备以提供移动演示。

但有些网站也只允许访问特定用户代理值的内容。 设置您自己的值可能会导致 Web 服务器不响应或返回其他错误,例如未经授权的错误。 因此,当您使用此技术时,请务必检查它是否有效。