从JSON文件中提取/抓取特定数据

1 投票
4 回答
4368 浏览
提问于 2025-04-17 03:45

这件事让我困扰了好几个小时。我搜索了很多信息,但问题是我水平不高,实际上我是个初学者。我想用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 个回答

2

你已经很接近了。

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))
2

好的,这段话有点简短,但关于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,可能会帮你弄清楚一些事情。

3

在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']))

撰写回答