Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /www/wwwroot/s5s5.me/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
最近在学习Python,攻略说要多多练习才能学有成效,所以刚好非常喜欢听豆瓣FM的华语频道,有把里面的歌全下载下来的冲动,所以就拿他练手了,连学边写,果然学了不少东东,在此感谢搜索网站及QQ群,还有哪些乐于分享和讨论Python的人啊,不然我上哪模仿都不知道去哪啊,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | # -*- coding:utf-8 -*- # Filename : ex38.py # https://s5s5.me # 抓取豆瓣fm华语频道音乐列表 import os import urllib import json import time def get_music_json(): # 抓取json并写入临时txt url = 'http://douban.fm/j/mine/playlist?type=n&channel=1' # 定义json地址 music_json = urllib.urlopen(url) # urllib去抓json回来 base_json = json.load(music_json) # json把json解析 output = open('tempfje_-83838399wfjefie.txt', 'a') # 增量写入txt for i in base_json['song']: # 找到json中的相关元素 title = i['title'].encode('utf8') # 写入txt用utf8码 artist = i['artist'].encode('utf8') output.write(('%s\t%s' % (artist, title)) + '\n') # 一行一首歌的写 output.close() # 关了文件 def no_repeat(): # 对临时txt去重并排序 read_txt = file('tempfje_-83838399wfjefie.txt', 'r') # 读临时txt write_txt = file('songlist.txt', 'w') # 要写入的txt s = set() # 用set去重 for i in read_txt: # 把txt写到set过的变量中 s.add(i) s = list(s) # 先转成列表才能排序 s.sort() # 排序 for i in s: # 写入txt i = i.replace('/', '&') # 替换/为& write_txt.write(i) os.remove('tempfje_-83838399wfjefie.txt') # 删除临时txt def main(): for i in range(0, 100): # 抓它100次,因为每条json只有10首歌左右 get_music_json() print i # 显示一下进度 time.sleep(1) # 延时1秒去抓,抓太快会被封IP no_repeat() # 去重排序 print '抓取豆瓣fm华语频道音乐列表完成' main() |
代码中是抓取100次,其实我自己抓取了1000次,还被豆瓣封了IP一个,嘿嘿~~~
其实只有206首歌,点击查看
正所谓“人生苦短,我用Python!”,国庆老婆回老家去了,孤身一人没事干,还好写写Python时光过的飞快啊,今晚虽然可能有雨,但我还是想出去吃串,哈哈哈……
Super 哥终于开始出力了哈, 顶个~
嘿嘿,你用MAC看本站的字体如何?是不是比较纤细一些啊?
好想法。拿到的json里还有mp3的ID。可以写个小工具。
douban_music_crawler.get_music(channel, limit)
不知道听什么了,就去抓个20首。够听一会儿了~~
ubuntu下有wget这种神器,你懂的~
朋友麻烦你帮忙弄一下豆瓣FM日文MHz的歌曲列表好吗。我有一首歌找不到。都翻烂了。豆瓣说我像机器人。麻烦你了。。876119588@qq.com 给发一下列表 麻烦了。。日文的数量太多。而且我找歌还得用耳朵。。
发了
读取回来得数据放在内存就可以了,没必要生成临时文件,试试用队列多线程读取,把所有的音乐列表都下载回来,下一步应该试试把mp3文件都下载回来。
嗯,是应该放内存里的,嘿
下MP3已经实现了,自用了。