这是我最初的几个星期的编码;为一个基本的问题道歉。
我成功地解析了“WorldNews”subreddit json,识别了每个孩子(在我写作时,他们中有24个),并获取了每个新闻条目的标题。我现在正试图从这些新闻标题中创建一个数组。下面的代码每2-3次都会将第五个标题(4)打印到命令行(否则会出现下面的错误)。它也不会一次打印多个标题(例如,如果我尝试2,3,4,我将继续得到相同的错误)。
当我没有编译时所得到的错误:
in <module> Children = theJSON["data"]["children"] KeyError: 'data'
我的剧本:
import requests
import json
r = requests.get('https://www.reddit.com/r/worldnews/.json')
theJSON = json.loads(r.text)
Children = theJSON["data"]["children"]
News_list = []
for post in Children:
News_list.append (post["data"]["title"])
print News_list [4]
发布于 2016-01-02 12:18:17
在埃里克的帮助下,我设法找到了解决方案。这里的问题实际上与dict或数组的键、解析或表示无关。当从reddit请求Url并试图打印json字符串输出时,我们会遇到一个HTTP错误429。解决这个问题很简单。答案是在这 redditdev线程上找到的。
解决方案:通过为请求Url的设备添加一个标识符(标头中的“用户代理”),它运行平稳,每次都工作。
import requests
import json
r = requests.get('https://www.reddit.com/r/worldnews.json', headers = {'User-agent': 'Chrome'})
theJSON = json.loads(r.text)
print theJSON
发布于 2015-12-31 13:03:42
这意味着,无论出于什么原因,您获得的有效负载中没有一个data
密钥。我不知道Reddit的JSON;我测试了请求,发现您使用的是正确的密钥。您说您的代码每隔几次工作一次,这一事实告诉我,您在请求之间得到了不同的响应。我无法复制它,我试图一遍又一遍地提出请求,并检查是否有正确的响应。如果我不得不猜测为什么你会得到一些不同的东西,我会说它要么是限制利率,要么是暂时的503 (Reddit有问题)。
您可以通过捕获KeyError
或使用字典的.get
方法来防范这种情况。
捕捉KeyError
try:
Children = theJSON["data"]["children"]
except KeyError:
print 'bad payload'
return
使用.get
Children = theJSON.get("data", {}).get("children")
if not Children:
print 'bad payload'
return
https://stackoverflow.com/questions/34539129
复制相似问题