首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python请求机器人检测?

python请求机器人检测?
EN

Stack Overflow用户
提问于 2014-04-09 23:10:30
回答 3查看 20.1K关注 0票数 6

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

我的问题是:我在某处读到,使用浏览器获取URL与使用requests之类的东西获取URL是不同的。因为requests fetch不会获得cookie和浏览器会得到的其他东西。requests中有没有一个选项可以模拟浏览器,这样服务器就不会认为我是机器人了?或者这不是一个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-09 23:17:29

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

代码语言:javascript
复制
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。如果没有应用程序接口或者你没有使用它,确保你知道这个站点是否允许像这样的自动网络爬行,研究一下Terms of use。你知道,在一段时间内有太多的请求后,他们可能会阻止你。

另请参阅:

edit1: selenium使用webdriver而不是真正的浏览器;也就是说,它在头中传递一个webdriver = TRUE,这使得它比requests更容易检测。

票数 10
EN

Stack Overflow用户

发布于 2019-01-25 16:28:28

通常可以有所帮助的事情:

应用程序报头应该类似于常见的浏览器,包括:

  • User-Agent:使用最近的一个(参见
  • ),或者更好的是,如果您发出多个请求,则使用随机的最近的一个(参见language)
  • Accept::类似于"en,en-US;q=0,5“的东西(适用于您的文本)标准的应用程序将类似于”/

  • 导航:
    • 如果您发出多个请求,请在它们之间放置一个随机超时
    • 如果您打开在页面中找到的链接,请更好地设置Referer标题accordingly
    • Or,模拟鼠标活动移动,单击并跟随link

  • Images应为enabled
  • Javascript应启用
    • 检查是否已在客户端javascript页面context

中设置了"navigator.plugins“和"navigator.language

  • 使用proxies
票数 6
EN

Stack Overflow用户

发布于 2019-08-07 14:27:55

第一个答案是,使用selenium模块是可以检测到的,但是selenium是一个webdriver,而不是一个普通的浏览器,它可以被检测到,但是总有一种方法可以欺骗任何东西

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22966787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档