使用python扫描本地音乐并下载歌词,python扫描, 先简单的说下吧,百度提
使用python扫描本地音乐并下载歌词,python扫描, 先简单的说下吧,百度提
这次这个真的是干货哦,昨晚弄了半晚上,从8点吃完饭就开始写,一直到了快12点才弄好,新手伤不起呀。
先简单的说下吧,百度提供了一个音乐搜索的api,你想百度请求类似于
http://box.zhangmen.baidu.com/x?op=12&count=1&title=最佳损友
XHTML
This XML file does not appear to have any style information associated with it. The document tree is shown below.1 8 2829 1 ]]> </encode> <decode> <![CDATA[ 7345405.mp3?xcode=e6b69cf593ea22ac78e1478e78479dc19e8e4650995cb99a&mid=0.31929107437537 ]]> </decode> <type>8</type> <lrcid>2829</lrcid> <flag>1</flag> </durl> <p2p> <hash>f98b6772aa97966550ec80617879becee0233bf4</hash> <url> <![CDATA[ ]]> </url> <type>mp3</type> <size>3778335</size> <bitrate>128</bitrate> </p2p> </result>
?
??????????????????????lrc????????????2829?????
?encode?decode?????????mp3??????????
http://zhangmenshiting.baidu.com/data2/music/12762845/YmRqamdua21fn6NndK6ap5WXcJlrmG1xlJhobWibmGpjk5ZtmWiZcWRjZ5lqbGyelGKWlZtubGljZ5lka2uanWSXY1qin5t1YWBmZW5ocGlhaWdnbGtqbzE$12762845.mp3?xcode=e6b69cf593ea22ac9d2b9314e565fc0caf85125f065ce3e0&mid=0.31929107437537
????????????????????????
????????lrcid?????2829
http://box.zhangmen.baidu.com/bdlrc/ ?????lrc??????,
??????????http://box.zhangmen.baidu.com/bdlrc/28/2829.lrc
???????????????????????lrcid??100????????????????????????lrcid?????????.lrc????
??lrc???????????????????????????????ok??
???????????????
import os import os.path import re import eyed3 import urllib2 import urllib from urllib import urlencode import sys import os reload(sys) sys.setdefaultencoding('utf8') music_path = r"E:\music" lrc_path = r"e:\lrc" os.remove('nolrc.txt') os.remove('lrcxml.txt') the_file = open('lrcxml.txt','a') nolrc_file = open('nolrc.txt','a') for root,dirs,files in os.walk(music_path): for filepath in files: the_path = os.path.join(root,filepath) if (the_path.find("mp3") != -1): print the_path the_music = eyed3.load(the_path) the_teg = the_music.tag._getAlbum() the_artist = the_music.tag._getArtist() the_title = the_music.tag._getTitle() # print the_teg # print the_title # print the_artist b = the_title.replace(' ','+') # print b a = the_artist.replace(' ','+') #print urlencode(str(b)) if isinstance(a,unicode): a = a.encode('utf8') song_url = "http://box.zhangmen.baidu.com/x?op=12&count=1&title="+b+"" />"+a+" " the_file.write(song_url+'\n') page = urllib2.urlopen(song_url).read() print page theid = 0 lrcid = re.compile('<lrcid>(.*?)</lrcid>',re.S).findall(page) have_lrc = True if lrcid != []: theid = lrcid[0] else: nolrc_file.write(the_title+'\n') have_lrc = False print theid if have_lrc: firstid = int(theid)/100 lrcurl = "http://box.zhangmen.baidu.com/bdlrc/"+str(firstid)+"/"+theid+".lrc" print lrcurl lrc = urllib2.urlopen(lrcurl).read() if(lrc.find('html')== -1): lrcfile = open(lrc_path+"\\"+the_title+".lrc",'w') lrcfile.writelines(lrc) lrcfile.close() else: nolrc_file.write(the_title+'\n') the_file.close() nolrc_file.close() print "end!"
有用第一步请求所获取到底是xml格式的,所以本来想着解析xml来获取lrcid,但是在实现过程中遇到了各种问题,别的还容易,就在这一块儿浪费的时间最长,纠结未果之后,只能改用正则表达式来获取了。只能说明还是学艺不精呢。
相关内容
- 一些简单的Python测试题,简单Python测试题,未经作者许可
- Python实现控制台中的进度条,python控制台, 我之前一直
- Python 标准库 urllib2 的使用细节,pythonurllib2,这里总结了
- 教你用Python创建瀑布图,Python创建瀑布图,未经许可,禁
- 如何入门 Python 爬虫?,入门python爬虫,下面是 谢科(
- 如何使用Python编写一个Lisp解释器,pythonlisp解释器,我将
- 500 行 Python 代码做一个英文解析器,python英文,未经许可
- 重写Reddit,,发布之后,Django上
- 用 Python 编写一个国际象棋 AI 程序,pythonai,未经许可,
- 用 Python 和 OpenCV 检测图片上的条形码,,未经许可,禁
评论关闭