您的位置:首页 > 编程语言 > Python开发

使用python脚本抓取百度fm中的歌曲

2013-09-18 17:28 375 查看
抽空研究了一下百度fm的机制,发现没有想像中复杂啊。

这篇文章参考了zhangyuanwe的XBMC百度FM插件。

检查http://fm.baidu.com的源代码,在最后一部分的javascript代码段可以发现rawChannelList={...},这里即是频道列表的信息。

为方便处理,先将这段代码按照json的方式解析为python列表:

start = html.find("{", html.find("rawChannelList")) # find javascript code of the channel list urls
end = html.find(";", start)
listjson = html[start:end].strip()	# cut spaces to get channel list json
#print listjson

# parse channel json
data = json.loads(listjson)	# parse json
channel_id_list = []
for item in data['channel_list']:
#	print "Channel Name:\t", item['channel_name'], "Category:\t", item['cate']
channel_id_list.append(item['channel_id'])	# get channel id


这里截取了channel_name和channel_id标签,后者用来找到该频道的地址。百度FM的频道格式为http://fm.baidu.com/dev/api/?tn=playlist&format=json&id=,这里的id即是channel_id的内容。将上面的网址补全,用urlopen打开并读取,即可得到频道列表的json数据。



上图中有用数据只有channel_id和channel_name,我们需要使用channel_id来补全http://music.baidu.com/data/music/fmlink?type=mp3&rate=320&songIds=以得到真正的歌曲列表。同样,这是一个json格式的数据,解析后得到:



这里面就是我们想要得到的数据了,尤其是songLink,它即是在线播放地址,也可以用于下载地址。

如果开发更为完备的应用,应该获取上面的其他信息。

把这些信息进行组织,可以形成歌单,如获取歌名、图片、歌词等,存储到文件里,可以由mplayer这样支持流媒体的播放器进行播放。

这是我下载的结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: