首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python机械化返回HTTP 429错误

Python机械化返回HTTP 429错误
EN

Stack Overflow用户
提问于 2015-08-16 20:37:40
回答 1查看 574关注 0票数 1

我试图通过python通过mechanize模块完成一个自动化的任务:

  1. 在web表单中输入关键字,提交表单。
  2. 在响应中寻找特定元素。

一次就行了。现在,我在关键字列表中重复这个任务。

并得到HTTP错误429 (太多的请求)。

我尝试了以下方法来解决这个问题:

  1. 添加自定义标题(通过使用代理,我专门为该网站记录了它们),这样它看起来就像是合法的浏览器请求。 br=mechanize.Browser() br.addheaders =(‘用户-代理’,'Mozilla/5.0 (WindowsNT6.1) AppleWebKit/537.36 ( br.addheaders,类似壁虎)Chrome/41.0.2228.0Safari/537.36‘) br.addheaders = ('Connection',’KHTML‘)br.addheaders= ('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;( q=0.8') br.addheaders =(‘升级-不安全-请求’,'1') br.addheaders =(‘接受-编码’,‘gzip,紧缩,sdch') br.addheaders =(’接受-语言‘,'en-US,en;q=0.8’)
  2. 由于每5次请求都会出现被阻塞的响应,所以我尝试在5次请求之后休眠20秒。

这两种方法都不起作用。

EN

回答 1

Stack Overflow用户

发布于 2015-08-17 09:16:30

您需要限制请求的速率,以符合服务器的配置允许的内容。(Web刮刀:限制在单域上每分钟/小时的请求?可以显示允许的费率)

mechanize使用urllib2 (Lib/site-packages/mechanize/_urllib2.py)的修补程序进行网络操作,它的Browser类是_urllib2_fork.OpenerDirector的后代。

因此,修补其逻辑的最简单方法似乎是将handler添加到Browser对象中。

  • 使用default_open和适当的handler_order将其放在每个人之前(较低的优先级)。
  • 这将暂停,直到请求符合条件,例如令牌桶漏桶算法,例如在urllib2节流中实现的算法。请注意,存储桶可能是每个域或每个IP。
  • 最后,return None将请求推送到以下处理程序

由于这是一个常见的需求,您可能应该将您的实现发布为一个可安装的包。

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

https://stackoverflow.com/questions/32039686

复制
相关文章

相似问题

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