这次这个真的是干货哦,昨晚弄了半晚上,从8点吃完饭就开始写,一直到了快12点才弄好,新手伤不起呀。

先简单的说下吧,百度提供了一个音乐搜索的api,你想百度请求类似于

http://box.zhangmen.baidu.com/x?op=12&count=1&title=最佳损友$$陈奕迅$$$$

的地址,百度会给你返回一段xml,如下所示

This XML file does not appear to have any style information associated with it. The document tree is shown below.

1

http://zhangmenshiting.baidu.com/data2/music/12762845/YmRqamdua21fn6NndK6ap5WXcJlrmG1xlJhobWibmGpjk5ZtmWiZcWRjZ5lqbGyelGKWlZtubGljZ5lka2uanWSXY1qin5t1YWBmZW5ocGlhaWdnbGtqbzE$

]]>

12762845.mp3?xcode=e6b69cf593ea22ac9d2b9314e565fc0caf85125f065ce3e0&mid=0.31929107437537

]]>

8

2829

1

http://zhangmenshiting2.baidu.com/data2/music/7345405/aGVnaWlmbGaeomZzrZmmnJZvmGqXbHCbl2dsZ5qXaWqSlWpsmmdrb2mXamxpbXCclGNsmW2ba25mYmxtapmZcWqTWaGemnRoX2VkbWdvaGhoZmZramluOA$$

]]>

7345405.mp3?xcode=e6b69cf593ea22ac78e1478e78479dc19e8e4650995cb99a&mid=0.31929107437537

]]>

8

2829

1

f98b6772aa97966550ec80617879becee0233bf4

mp3

3778335

128

简单的说明下,由于我们要做的只是获取到歌曲的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('(.*?)',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扫描本地音乐并下载歌词相关推荐

  1. python播放音乐同步歌词_使用Python下载歌词并嵌入歌曲文件中的实现代码

    使用python扫描本地音乐并下载歌词 这次这个真的是干货哦,昨晚弄了半晚上,,,,从8点吃完饭就开始写,一直到了快12点才弄好,,,新手,伤不起呀.... 先简单的说下吧,百度提供了一个音乐搜索的a ...

  2. python下载网页歌词_使用Python下载歌词并嵌入歌曲文件中的实现代码

    使用python扫描本地音乐并下载歌词这次这个真的是干货哦,昨晚弄了半晚上,,,,从8点吃完饭就开始写,一直到了快12点才弄好,,,新手,伤不起呀.... 先简单的说下吧,百度提供了一个音乐搜索的ap ...

  3. Android 自动扫描歌曲,Android扫描本地音乐文件开发案例分享

    一.前言 本来觉得so easy,真是没想到,还搞了老半天,搞的我大汗淋漓,要拍桌子摔键盘了. 本想实现的功能是: 通过网易云音乐/百度音乐/QQ音乐/酷狗音乐中一个API,通过关键词/歌手/歌词来搜 ...

  4. Android 音乐APP(一)扫描本地音乐

    效果图 音乐APP 扫描本地音乐 前言 正文 ① 新建项目 ② 第三方依赖 ③ 权限和基础配置 ④ 页面设计 ⑤ 权限请求 ⑥ 获取音乐数据 ⑦ 数据显示 结语 前言   这个项目纯粹的就是心血来潮, ...

  5. 音乐app、app原型、音乐原型、云音乐、听歌、电台、本地音乐、点赞、收藏、歌单广场、动态、社区、评论、歌词、歌手、主播、视频、云村、下载、翻唱、歌曲播放、订阅、频道、引导页、登录注册、axure原型

    音乐app.app原型.音乐原型.云音乐.听歌.电台.本地音乐.点赞.收藏.歌单广场.动态.社区.评论.歌词.歌手.主播.视频.云村.下载.翻唱.歌曲播放.订阅.频道.引导页.登录注册.axure原型 ...

  6. 音乐app、音乐原型、在线音乐、云音乐、听歌、电台、本地音乐、点赞、收藏、歌单广场、动态、社区、评论、歌词、歌手、主播、视频、云村、下载、翻唱、歌曲播放、订阅、频道、引导页、登录注册、axure原型

    音乐app.音乐原型.在线音乐.云音乐.听歌.电台.本地音乐.点赞.收藏.歌单广场.动态.社区.评论.歌词.歌手.主播.视频.云村.下载.翻唱.歌曲播放.订阅.频道.引导页.登录注册.axure原型. ...

  7. 高仿网易云音乐一(可扫描本地音乐播放)

    最近闲下来做了个仿网易云音乐的音乐播放器 效果图: 项目下载地址 https://github.com/PangHaHa12138/MusicPlayerdemo 闪屏 扫描本地音乐 播放 仿探探 仿 ...

  8. 有没有java自编歌曲,高仿网易云音乐一(可扫描本地音乐播放)

    最近闲下来做了个仿网易云音乐的音乐播放器 效果图: p1.png p2.png p3.png p4.png p5.png p6.png 项目下载地址 闪屏 1.gif 扫描本地音乐 3.gif 播放 ...

  9. python 背景音乐程序代码_用Python演奏音乐

    背景 笔者什么乐器也不会,乐理知识也只有中小学音乐课学的一点点.不过借助Python,调用编曲家常用的MIDI程序库,也能弹奏出一些简单的音乐,以下是笔者的一些心得. 准备 安装mingus 首先是安 ...

  10. python字符串去掉空行_从python中的字符串中删除空格

    python字符串去掉空行 如何在python中删除字符串中的空格 (How to remove whitespaces in a string in python) str.lstrip()str. ...

最新文章

  1. Debug模式下加载文件,运行程序异常的慢
  2. boost::geometry::dot_product用法的测试程序
  3. 计算机科学导论学习资料
  4. mui的学习图片预览
  5. Goland安装-工欲善其事必先利其器
  6. 5个数中取三个数组合 不重复 php,PHP产生不重复随机数的5个方法总结
  7. 清华排名首登亚洲第一,今年财务预算300亿
  8. PHP中file_exists()判断中文文件名无效的解决方法
  9. Nginx一个server主机上80、433http、https共存
  10. object c中的多态
  11. Markdown 学习小记--进阶技巧-数学公式篇
  12. 你真的懂智慧园区数字平台?快来看看吧
  13. 禁止搜索引擎收录网站内容,百度,谷歌,所有等...
  14. 程序员双手飞快敲键盘的时候是在敲代码吗?
  15. 2021年4月程序员工资统计:平均14596元,南京程序员收入挤进一线。
  16. 【教程搬运】读懂github上的工程代码——带你熟悉Python中的Parser
  17. cc1310实现wor接收发送低功耗模式
  18. IDEA 卡住半天,buid(编译)不动——解决办法(适用于maven和gradle)及定位全过程...
  19. 高通骁龙855性能首测:继续领先安卓阵营,但离苹果仍有差距...
  20. pdf图片如何转可编辑文字,加密pdf如何破解,你也能轻松学会的pdf处理技能

热门文章

  1. 计算机网络中常用设备处于脱机状态,win7网络正常网页提示处于脱机状态该怎么解决?...
  2. html flash轮播图,网页Flash实现图片轮播特效
  3. 根据视频学习DQN(Deep Q-learning)
  4. 阿里云服务器数据迁移(同一个账号内)
  5. stm32f4驱动enc28j60(吐槽篇)
  6. 教你怎么提高网速 最全提高网速方法
  7. 游戏测试的技术含量在哪儿?
  8. 几个大佬的公众号,贼厉害
  9. 小case:轻松解决企业建站的五大基础问题
  10. linux :ubuntu 安装搜狗输入法