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



这是我编码的头几周;为一个基本问题道歉。

我已经解析了"世界新闻"子版块reddit 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] 

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

解决方案:通过为请求Url的设备添加标识符(标头中的"User-agent"),它运行平稳,每次都能正常工作。

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

这意味着无论出于何种原因,您得到的有效负载中都没有data密钥。我不知道Reddit的JSON API;我测试了请求,发现您使用的密钥是正确的。您每隔几次就说您的代码有效,这一事实告诉我,您在请求之间会得到不同的响应。我无法复制它,我试着一次又一次地提出请求,并检查正确的响应。如果我必须猜测为什么你会得到不同的东西,我会说要么是利率限制,要么是临时的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

最新更新