python 请求机器人检测?

新手上路,请多包涵

我一直在使用 requests 库来挖掘这个网站。我没有在 10 分钟内向它提出太多请求。说 25。突然,网站给我一个 404 错误。

我的问题是:我在某处读到,使用浏览器获取 URL 不同于使用 requests 获取 URL。因为 requests fetch 不会获取浏览器会获取的 cookie 和其他内容。 requests 中是否有一个选项来模拟浏览器,这样服务器就不会认为我是机器人?或者这不是问题?

原文由 jason 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 797
2 个回答

基本上,您至少可以做一件事是发送 User-Agent 标头:

 headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0'}

response = requests.get(url, headers=headers)

除了 requests ,您可以使用 selenium 模拟真实用户 - 它使用真实的浏览器 - 在这种情况下,显然没有简单的方法可以将您的自动用户与其他用户区分开来。 Selenium 还可以使用“无头”浏览器。

此外,检查您正在抓取的网站是否提供 API。如果没有 API 或者您没有使用它,请确保您知道该站点是否真的允许像这样的自动网络抓取,研究 Terms of use 。您知道,他们在一段时间内请求太多后阻止您可能是有原因的。

另见:

edit1:selenium 使用 webdriver 而不是真正的浏览器;即,它在标头中传递了 webdriver = TRUE ,使其比 requests 更容易检测。

原文由 alecxe 发布,翻译遵循 CC BY-SA 4.0 许可协议

一般来说可以提供帮助的事情:

  • 标头应与常见浏览器相似,包括:
  • 导航 :
    • 如果您发出多个请求,请在它们之间放置一个 随机超时
    • 如果您打开在页面中找到的链接,请相应地设置 Referer 标头
    • 或者更好的是,模拟鼠标活动来移动、单击和跟踪链接
  • 应该启用 图像
  • 应启用 Javascript
    • 检查客户端 javascript 页面上下文中是否设置了“ navigator.plugins ”和“ navigator.language
  • 使用代理

原文由 Grubshka 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题