【发布时间】:2018-05-21 08:42:13
【问题描述】:
下面的 python 程序询问用户两个 reddit 用户名并比较他们的分数。
import json
from urllib import request
def obtainKarma(users_data):
users_info = []
for user_data in users_data:
data = json.load(user_data)
posts = data["data"]["children"]
num_posts = len(posts)
scores = []
comments = []
for post_id in range(num_posts):
score = posts[post_id]["data"]["score"]
comment = posts[post_id]["num_comments"]
scores.append(score)
comments.append(comment)
users_info.append((scores,comments))
user_id = 0
for user_info in users_info:
user_id+=1
print("User"+str(user_id))
for user_attr in user_info:
print(user_attr)
def getUserInfo():
count = 2
users_data = []
while count:
count = count + 1
username = input("Please enter username:\n")
url = "https://reddit.com/user/"+username+".json"
try:
user_data = request.urlopen(url)
except:
print("No such user.\nRetry Please.\n")
count = count + 1
raise
users_data.append(user_data)
obtainKarma(users_data)
if __name__ == '__main__':
getUserInfo()
但是,当我运行程序并输入用户名时,出现错误:
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 429: Too Many Requests
我尝试寻找类似的问题,但没有人满意地解决这个特定问题。查看错误,是否可以说 URL 包含超过特定限制的数据量?但这听起来仍然很荒谬,因为它并没有那么多数据。
谢谢。
【问题讨论】:
-
您尝试请求的 URL 是速率限制的。当您达到速率限制时,服务器将发送“429: Too Many Requests”。您将不得不考虑如何发送更少的请求或如何在代码中包含冷却时间。阅读有关 reddit 的速率限制,我相信他们已经记录了。
-
@Tomalak 哦,那么每个网站的请求数都有限制吗?我不知道。如果是这样,谢谢!
-
是的。 Web 服务器通常会实现这一点,以避免一个编程不良的客户端(或恶意编程的客户端)陷入资源困境。
标签: python-3.x urllib