首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将reddit json解析为Python数组并从数组中打印项

将reddit json解析为Python数组并从数组中打印项
EN

Stack Overflow用户
提问于 2015-12-30 23:59:44
回答 2查看 2.1K关注 0票数 3

这是我最初的几个星期的编码;为一个基本的问题道歉。

我成功地解析了“WorldNews”subreddit json,识别了每个孩子(在我写作时,他们中有24个),并获取了每个新闻条目的标题。我现在正试图从这些新闻标题中创建一个数组。下面的代码每2-3次都会将第五个标题(4)打印到命令行(否则会出现下面的错误)。它也不会一次打印多个标题(例如,如果我尝试2,3,4,我将继续得到相同的错误)。

当我没有编译时所得到的错误:

代码语言:javascript
代码运行次数:0
运行
复制
in <module> Children = theJSON["data"]["children"] KeyError: 'data'

我的剧本:

代码语言:javascript
代码运行次数:0
运行
复制
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] 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-02 20:18:17

埃里克的帮助下,我设法找到了解决方案。这里的问题实际上与dict或数组的键、解析或表示无关。当从reddit请求Url并试图打印json字符串输出时,我们会遇到一个HTTP错误429。解决这个问题很简单。答案是在 redditdev线程上找到的。

解决方案:通过为请求Url的设备添加一个标识符(标头中的“用户代理”),它运行平稳,每次都工作。

代码语言:javascript
代码运行次数:0
运行
复制
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
票数 3
EN

Stack Overflow用户

发布于 2015-12-31 21:03:42

这意味着,无论出于什么原因,您获得的有效负载中没有一个data密钥。我不知道Reddit的JSON;我测试了请求,发现您使用的是正确的密钥。您说您的代码每隔几次工作一次,这一事实告诉我,您在请求之间得到了不同的响应。我无法复制它,我试图一遍又一遍地提出请求,并检查是否有正确的响应。如果我不得不猜测为什么你会得到一些不同的东西,我会说它要么是限制利率,要么是暂时的503 (Reddit有问题)。

您可以通过捕获KeyError或使用字典的.get方法来防范这种情况。

捕捉KeyError

代码语言:javascript
代码运行次数:0
运行
复制
try:
    Children = theJSON["data"]["children"]
except KeyError:
    print 'bad payload'
    return

使用.get

代码语言:javascript
代码运行次数:0
运行
复制
Children = theJSON.get("data", {}).get("children")
if not Children:
    print 'bad payload'
    return
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34539129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档