我正在尝试通过mechanize
模块通过python执行自动化任务:
这是一次性的。现在,我重复此任务以获取关键字列表。
我收到HTTP错误429(请求太多)。
我尝试了以下方法解决此问题:
添加自定义标题(我通过使用代理专门针对该网站注明了这些标题),以便它看起来是合法的浏览器请求。
br=mechanize.Browser()
br.addheaders = [('User-agent', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36')]
br.addheaders = [('Connection', 'keep-alive')]
br.addheaders = [('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8')]
br.addheaders = [('Upgrade-Insecure-Requests','1')]
br.addheaders = [('Accept-Encoding',' gzip, deflate, sdch')]
br.addheaders = [('Accept-Language','en-US,en;q=0.8')]`
由于第5次请求的响应被阻止,我在5次请求后尝试休息20秒。
这两种方法都不起作用。
答案 0 :(得分:0)
您需要限制请求的速率以符合服务器配置允许的内容。 (Web Scraper: Limit to Requests Per Minute/Hour on Single Domain?可能会显示允许的费率)
mechanize
使用经过严格修补的urllib2
版本(Lib/site-packages/mechanize/_urllib2.py
)进行网络操作,其Browser
类是其_urllib2_fork.OpenerDirector
的后代。
因此,修补其逻辑的最简单方法似乎是在handler
对象中添加Browser
default_open
和适当的handler_order
将其放在所有人之前(较低的是较高优先级)。return None
将请求推送到以下处理程序由于这是一个常见的需求,您应该将实现发布为可安装的包。