从JSON文件中提取/抓取特定数据
这件事让我困扰了好几个小时。我搜索了很多信息,但问题是我水平不高,实际上我是个初学者。我想用Python来实现这个(如果可以的话!)。也许用JavaScript和PHP也可以?让我来解释一下。
我刚发现这个网站 http://listeningroom.net,它非常棒。你可以创建或加入房间,上传音乐曲目,并和朋友一起听。
我想从一个.json文件中提取/抓取一些特定的数据。这个文件包含了艺术家、专辑标题、曲目标题等信息。我只想提取艺术家、专辑和曲目标题。
http://listeningroom.net/room/chillasfuck/spins.json 这个.json文件 包含了过去24小时播放的曲目。
我在网上找了一些资料后,成功用Python抓取了整个.json文件(本地的.json文件),用的代码可能不太有效。
json_data=open('...\spins.json')
data = json.load(json_data)
pprint(data)
json_data.close()
这段代码输出了以下内容:
[{u'endTime': u'1317752614105',
u'id': u'cf37894e8eaf886a0d000000',
u'length': 492330,
u'metadata': {u'album': u'Mezzanine',
u'artist': u'Massive Attack',
u'bitrate': 128000,
u'label': u'Virgin',
u'length': 17494.479054779807,
u'title': u'Group Four'},
只是一部分输出
1. 我想从一个网址抓取数据(就是上面提供的那个)
2. 只获取'专辑'、'艺术家'和'标题'
3. 确保输出尽可能简单,像这样:
Artist
Track title
Album
Artist
Track title
Album
4. 如果不麻烦的话,把结果保存到一个.txt文件里
我希望能得到一些帮助,我真的想为自己做这个,这样我就可以发现更多的音乐了!
马尔文
4 个回答
你已经很接近了。
data = json.load(json_data)
这行代码是把一个JSON字符串转换成Python可以使用的对象——在这个例子中,是一个字典列表(还有一个叫' metadata'的字典,它里面又包含了字典)。
要把它变成你想要的格式,你只需要遍历这些项目。
for song in data:
artist = song['metadata']['artist'] # This tells it where to look in the dictionary. It's looking for the dictionary item called 'metadata'. Then, looking inside that dictionary for 'artist'.
album = song['metadata'['album']
songTitle = song['metadata']['title']
print '%s\n%s\n%s\n' % (artist, album, songTitle)
或者,如果你想把它打印到一个文件里:
with open('the_file_name.txt','w') as f:
for song in data:
artist = song['metadata']['artist']
album = song['metadata'['album']
songTitle = song['metadata']['title']
f.write('%s\n%s\n%s\n' % (artist, album, songTitle))
好的,这段话有点简短,但关于JSON的事情就是,它可以把一个数组转换成一个字符串。
比如说,
array['first'] = 'hello';
array['second'] = 'there';
这段代码会变成
[{'first': 'hello', 'second': 'there'}];
经过一个叫jsonencode的过程。
然后再用jsondecode处理这个字符串,你就能把数组拿回来了。
所以,只需要把你的JSON文件通过一个解码器处理一下,然后你就可以通过下面的方式访问你的数据:
array['metadata'].album
array['metadata'].artist
...
我从来没有用过Python,但应该是一样的。
你可以看看这个链接:http://www.php.net/manual/en/function.json-decode.php,可能会帮你弄清楚一些事情。
在Python中(当你加载了json文件之后)
for elem in data:
print('{artist}\n{title}\n{album}\n'.format(**elem['metadata']))
要保存到一个文件中:
with open('the_file_name.txt','w') as f:
for elem in data:
f.write('{artist}\n{title}\n{album}\n\n'.format(**elem['metadata']))