【问题标题】:How to properly scrape json response from reddit?如何正确地从 reddit 抓取 json 响应?
【发布时间】:2017-10-29 18:24:00
【问题描述】:

我正在尝试将下面链接的 json 中的所有“作者”条目保存到一个列表中,但是对于 python 来说是非常新的。有人可以指出我正确的方向吗?

json:https://codebeautify.org/jsonviewer/cb0d0a91

试图抓取一个 reddit 线程:

import requests
import json

url ="https://www.reddit.com/r/easternshoremd/comments/72u501/going_to_be_in_the_easton_area_for_work_next_week.json"

r = requests.get(url, headers={'User-agent': 'Chrome'})
d = r.json()

scrapedids = []

for child in d['data']['children']:
    scrapedids.append(child['data']['author'])

print (scrapedids)

如果我将 url 从 reddit 帖子切换到 subreddit,那么它就可以工作。例如,如果我设置

url = ("https://www.reddit.com/r/easternshoremd.json")

我认为问题在于我对 json 的目录/树(不管它叫什么)缺乏了解。我已经挂了几个小时,感谢任何帮助。

错误:

Traceback(最近一次调用最后一次): 文件“/home/usr/PycharmProjects/untitled/delete.py”,第 14 行,在 对于 d['data']['children'] 中的孩子: TypeError: 列表索引必须是整数或切片,而不是 str

【问题讨论】:

  • d 是一个列表,或者d['data'] 是一个列表。您可以通过添加 print(d),然后在创建 d 的位置下方添加 print(d['data']) 来找出哪个。
  • 如果您查看 json,您会看到基本 json 对象是一个列表,而“数据”在第一个条目中。因此,您可以在 child 和 ['data'] 之间添加 [0]。

标签: python json screen-scraping reddit


【解决方案1】:

您包含一个指向 JSON 的链接,这很好。它表明根是一个数组。

因此您的代码应该看起来更像:

import requests
import json

url ="https://www.reddit.com/r/easternshoremd/comments/72u501/going_to_be_in_the_easton_area_for_work_next_week.json"

r = requests.get(url, headers={'User-agent': 'Chrome'})
listings = r.json()

scrapedids = []

for listing in listings:
    for child in listing['data']['children']:
        scrapedids.append(child['data']['author'])

print (scrapedids)

请注意,我将d 重命名为listings,这与kind 属性('listing')有关。

【讨论】:

  • 效果很好。我非常感谢您,并非常感谢您的帮助。我很感激你花时间和精力来帮助一个小家伙。祝你有美好的一天。
猜你喜欢
  • 1970-01-01
  • 2018-01-28
  • 2015-02-08
  • 2018-05-23
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多