urllib2 HTTP error 429

2019-08-02 07:17发布

所以,我有子reddits的名单,我使用的urllib打开它们。 当我经过他们最终的urllib失败:

urllib2.HTTPError: HTTP Error 429: Unknown

做一些研究,我发现,reddit的限制了IP请求到他们的服务器的ammount的:

毫无多个请求每两秒钟。 这里也有一些津贴请求的突发状况,但保持清醒。 在一般情况下,保持它在一分钟内不超过30名的请求。

所以,我想我会使用time.sleep()我的申请限制在一个页面每10秒。 这最终失败一样好。

该帖以上是从抓住reddit的API页面。 我不使用的reddit的API。 在这一点上,我想两件事情。 如果不是这样的限制仅适用于reddit的API或urllib的也是有限制的。

有谁知道这两件事情它是哪一个? 或如何,我可以去解决这个问题?

Answer 1:

从https://github.com/reddit/reddit/wiki/API :

许多默认的用户代理(如“巨蟒/ urllib的”或“Java”的)被大大限制,鼓励唯一的描述用户代理字符串。

这适用于常规的请求以及。 您需要发出请求时提供自己的用户代理头。

#TODO: change user agent string
hdr = { 'User-Agent' : 'super happy flair bot by /u/spladug' }
req = urllib2.Request(url, headers=hdr)
html = urllib2.urlopen(req).read()

然而,这将创建为每个请求一个新的连接。 我建议用另一种库,能够重新使用连接的httplib或请求 ,例如。 它将把服务器上的更小的压力,加快了请求:

import httplib
import time

lst = """
science
scifi
"""

hdr= { 'User-Agent' : 'super happy flair bot by /u/spladug' }
conn = httplib.HTTPConnection('www.reddit.com')
for name in lst.split():
    conn.request('GET', '/r/'+name, headers=hdr)
    print conn.getresponse().read()
    time.sleep(2)
conn.close()


Answer 2:

书签交易执行速率通过请求限制(如不连接建议用于两个IP地址和用户代理通过匿名懦夫)。 你碰到的问题是,大家谁试图使用的urllib2将速率限制为单个用户访问reddit的。

解决的办法是设置一个用户代理,你可以找到在回答这个问题 。

或者,放弃编写自己的代码来抓取Reddit和使用PRAW代替 。 它支持reddit的API的几乎所有功能,你不用担心任何之后的API规则,因为它负责的是你。



Answer 3:

我遇到同样的error.changing从``从urllib.request里进口的urlopen从BS4进口BeautifulSoup代码

HTML =的urlopen(URL)bsObj = BeautifulSoup(HTML) to从BS4进口BeautifulSoup进口urllib.request里urllib.request里导入的urlopen

的WebRequest = urllib.request.Request(URL,标题= { “用户代理”:})HTML =的urlopen(的WebRequest)bsObj = BeautifulSoup(HTML)``



文章来源: urllib2 HTTP error 429