使用Python下载歌词并嵌入歌曲文件中的实现代码 python如何导入音乐

时间:2021-07-15 23:04:20作者:成思睿

本内容主要为您介绍使用Python下载歌词并嵌入歌曲文件中的实现代码的经验知识,经过上千万码农友验证可行,为您解决使用Python下载歌词并嵌入歌曲文件中的实现代码的问题,下面即将揭晓答案。

使用python扫描本地音乐并下载歌词
这次这个真的是干货哦,昨晚弄了半晚上,,,,从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.
 result 
 count 1 /count 
 url 
 encode 
 ![CDATA[
http://zhangmenshiting.baidu.com/data2/music/12762845/YmRqamdua21fn6NndK6ap5WXcJlrmG1xlJhobWibmGpjk5ZtmWiZcWRjZ5lqbGyelGKWlZtubGljZ5lka2uanWSXY1qin5t1YWBmZW5ocGlhaWdnbGtqbzE$
 /encode 
 decode 
 ![CDATA[
12762845.mp3 xcode=e6b69cf593ea22ac9d2b9314e565fc0caf85125f065ce3e0 mid=0.31929107437537
 /decode 
 type 8 /type 
 lrcid 2829 /lrcid 
 flag 1 /flag 
 /url 
 durl 
 encode 
 ![CDATA[
http://zhangmenshiting2.baidu.com/data2/music/7345405/aGVnaWlmbGaeomZzrZmmnJZvmGqXbHCbl2dsZ5qXaWqSlWpsmmdrb2mXamxpbXCclGNsmW2ba25mYmxtapmZcWqTWaGemnRoX2VkbWdvaGhoZmZramluOA$$
 /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

    
相关文章
  • python下载文件时显示下载进度的方法

    本文实例讲述了python下载文件时显示下载进度的方法。分享给大家供大家参考。具体分析如下: 将这段代码放入你的脚本中,类似:urllib.urlretrieve(getFile, saveFile, reporthook=report) 第三个参数如下面的函数定义report,urlretrieve下载文件时会实时回调report函数,显示下载进度 def report(count, blockSize, totalSize): percent = int(count*blockSize*100/totalSize) s

  • Python下载懒人图库JavaScript特效

    这是一个简单的Python脚本,主要从懒人图库下载JavaScript特效模板,在脚本中使用了gevent这个第三方库,使用的时候需要先安装。 #!/usr/bin/python # -*- coding: utf-8 -*- import urllib,os,sys import gevent,re from gevent import monkey from bs4 import BeautifulSoup gevent.monkey.patch_socket() Description:Python 爬虫抓取懒人图库的JS脚本模板 Auth

  • Python下载指定页面上图片的方法 python载入图片

    Python下载指定页面上图片的方法  更新时间:2016年05月12日 09:12:12   作者:charles_kao   这篇文章主要介绍了Python下载指定页面上图片的方法,涉及Python的正则匹配、URL及文件操作相关技巧,需要的朋友可以参考下

  • python下载图片实现方法(超简单) 用python做一张图片

    我们有时候会需要在网上查找并下载图片,当数量比较少的时候,点击右键保存,很轻松就可以实现图片的下载,但是有些图片进行了特殊设置,点击右键没有显示保存选项,或者需要下载很多图片,这样的情况,写一段Python爬虫代码就可以轻松解决! 一、页面抓取 #coding=utf-8 import urllib def getHtml(url): page = urllib.urlopen(url) html = page.read() return html html = getHtml("https://tieba.baidu.

  • python下载文件记录黑名单的实现代码

    ftp_path = '/GBCC/' # ftp目录 local_path = "C:\F\python\pythonwangtest\wyjj2\\" #本地的目录 # 连接FTP def ftpconnect(): ftp = FTP() ftp.set_debuglevel(2) # 打开调试级别2,显示详细信息 ftp.connect(ftp_server, 21) # 连接 ftp.login(username, password) # 登录,如果匿名登录则用空串代替即可 return ftp # 获取当前的年月日时分秒 def g

  • Python下载网络小说实例代码 python爬小说代码

    #处理的字符的确是gbk的,但是其中夹杂的部分特殊字符, #是gbk编码中所没有的如果有些特殊字符是GB18030中有的,但是是gbk中没有的。 #则用gbk去解码,去所不支持的字符,也比如会出错。 #所以,此种情况,可以尝试用和当前编码(gbk)所兼容的但所包含字符更多的编码(gb18030)去解码,或许就可以了。 #allHtml = resp.read().decode('gbk')# allHtml = resp.read().decode('gb18030')# textSoup = BeautifulSoup(allHtml) #章节名 s

  • Python下载网络文本数据到本地内存的四种实现方法示例

    本文实例讲述了Python下载网络文本数据到本地内存的四种实现方法。分享给大家供大家参考,具体如下: import urllib.request import requests from io import StringIO import numpy as np import pandas as pd 下载网络文件,并导入CSV文件作为numpy的矩阵 # 网络数据文件地址 url = "http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/p

  • python下载微信公众号相关文章 微信软件下载公众号

    本文实例为大家分享了python下载微信公众号相关文章的具体代码,供大家参考,具体内容如下 目的:从零开始学自动化测试公众号中下载“pytest"一系列文档 1、搜索微信号文章关键字搜索 2、对搜索结果前N页进行解析,获取文章标题和对应URL 主要使用的是requests和bs4中的Beautifulsoup Weixin.py import requests from urllib.parse import quote from bs4 import BeautifulSou

  • 详解Python下载图片并保存本地的两种方式 python怎么把图片保存在文件夹

    一:使用Python中的urllib类中的urlretrieve()函数,直接从网上下载资源到本地,具体代码: import os,stat import urllib.request img_url="https://timgsa.baidu.com/timg image quality=80 size=b9999_10000 sec=1516371301 di=d99af0828bb301fea27c2149a7070" \ "d44 imgtype=jpg er=1 src=http%3A%2F%2Fupload.qianhuaweb.co

  • 用Python下载一个网页保存为本地的HTML文件实例 python抓取网页内容并保存

    我们可以用Python来将一个网页保存为本地的HTML文件,这需要用到urllib库。 比如我们要下载山东大学新闻网的一个页面,该网页如下: 实现代码如下: import urllib.request def getHtml(url): html = urllib.request.urlopen(url).read() return html def saveHtml(file_name, file_content): # 注意windows文件命名的禁用符,比如 / with open(file_name