所以我有一个 sub-reddits 列表,我使用 urllib 来打开它们。当我仔细检查它们时,最终 urllib 失败了:
urllib2.HTTPError: HTTP Error 429: Unknown
经过一些研究,我发现 reddit 通过 IP 限制对其服务器的请求量:
每两秒发出的请求不得超过一个。对于突发请求有一定的限度,但要保持理智。一般来说,一分钟内的请求数不要超过 30 个。
所以我想我会用time.sleep()
将我的请求限制为每 10 秒一页。这最终也以失败告终。
上面的引用摘自红迪API页。我没有使用 reddit API。此时我在想两件事。该限制要么仅适用于 reddit API,要么 urllib 也有限制。
有谁知道这是这两件事中的哪一件吗?或者我该如何解决这个问题?
From https://github.com/reddit/reddit/wiki/API:
许多默认的用户代理(例如“Python/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 or Request, 例如。它将减轻服务器的压力并加快请求速度:
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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)