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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/banguijun/article/details/11815263

抽空研究了一下百度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这样支持流媒体的播放器进行播放。

这是我下载的结果:



展开阅读全文

没有更多推荐了,返回首页