仅抓取JSON文件中的选择字段

时间:2019-07-14 04:06:33

标签: python json python-2.7 urllib urlopen

我正在尝试仅生成以下JSON数据字段,但是由于某种原因,它将整个页面写入.html文件?我究竟做错了什么?它仅应产生引用的框标题,音频源网址,中等大小的图像等?

r    = urllib.urlopen('https://thisiscriminal.com/wp-json/criminal/v1/episodes?posts=10000&page=1')
data = json.loads(r.read().decode('utf-8'))
for post in data['posts']:
#    data.append([post['title'], post['audioSource'], post['image']['medium'], post['excerpt']['long']])
    ([post['title'], post['audioSource'], post['image']['medium'], post['excerpt']['long']])
with io.open('criminal-json.html', 'w', encoding='utf-8') as r:
  r.write(json.dumps(data, ensure_ascii=False))

2 个答案:

答案 0 :(得分:3)

您要与 input 数据和 output 数据区分开。在for循环中,您引用用于输入的变量data与用于输出的变量相同。您想要将输入中的选定数据添加到包含输出的列表中。

不要重复使用相同的变量名。这就是您想要的:

import urllib
import json
import io

url = urllib.urlopen('https://thisiscriminal.com/wp-json/criminal/v1/episodes?posts=10000&page=1')
data = json.loads(url.read().decode('utf-8'))
posts = []
for post in data['posts']:
    posts.append([post['title'], post['audioSource'], post['image']['medium'], post['excerpt']['long']])
with io.open('criminal-json.html', 'w', encoding='utf-8') as r:
    r.write(json.dumps(posts, ensure_ascii=False))

答案 1 :(得分:1)

您正在将整个json加载到变量数据中,并且将其转储而不进行更改。这就是为什么发生这种情况的原因。您需要做的是将所需的内容放入新变量中,然后将其转储。

查看行-         ([[post ['title'],post ['audioSource'],post ['image'] ['medium'],post ['excerpt'] ['long']])

它什么都不做。因此,数据保持不变。照马克·托隆宁的建议做,就可以了。