准备工作:
1.在已经安装python开发环境的情况下,还需安装第三方库:requests,安装教程可以参考:
2.对目标网站进行分析,获取目标文件链接
目标文件:第一页中的20个音乐文件
获取到歌曲列表的url后,还需要获取到每个音频文件的url,找任意一首歌曲,查看网站请求的文件信息,可以找到当前文件的地址(查找文件地址的过程需要不断去尝试,不是一开始就能确定)
有一个快速的查找方法:F12进入开发者工具后,把按类型排序由all切换成media,出现的那个就是要找的下载资源的url,如下图所示:
验证下这个地址是不是文件的真正地址,可以把这个url放到浏览器看看:
音频文件开始播放了,说明这个就是想要的文件地址。
这个地址只是当前歌曲的文件地址,其他歌曲的文件地址需要去寻找规律,通过查看列表页面(
/top/hot
)的源代码,可以发现是通过sid属性去判断是哪首歌曲,也就是说sid是歌曲文件的唯一标识符。
通过和上面获取到的歌曲(清晨)进行比对,发现音频文件地址中的参数包含sid的值(33),可以推测,其他歌曲只要获取到sid就能获取到对应的音频文件。
准备工作已经完成,接下来就是编写python代码,爬取文件并将音频文件保存到本地。
爬虫开始:
import requests
import re
import time
songIDs=[] #存放歌曲的sid
songNames=[] #存放歌曲的名称
url="/top/hot" #歌曲列表的url
#获取音乐榜单的网页信息
html=requests.get(url)
strr=html.text
pat1=r'sid="(.*?)"' #用于解析sid的正则
pat2=r'title="(.*?)" sid' #用于解析歌曲名称的正则
idList=re.findall(pat1,strr) #从爬取到的网页内容中获取sid
titleList=re.findall(pat2,strr) #从爬取到的网页内容中获取歌曲名称
songIDs.extend(idList) #将sid追加到列表
songNames.extend(titleList) #将歌曲名称追加到列表
#开始下载音频文件
for i in range(0,len(songIDs)):
songUrl="/play8/"+songIDs[i]+"/mp3/6"
songName=songNames[i]
#请求文件地址,获取文件资源
referer='/play/{}'.format(songIDs[i])
headers={'Referer':referer,'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'}
data=requests.get(songUrl,params="",headers=headers)
print("正在下载第",i+1,"首")
#将文件保存到指定目录
with open("C:\\music\\{}.mp3".format(songName),"wb") as f:
f.write(data.content)
time.sleep(0.5)
程序执行过程中可以看到打印的信息:
歌曲下载完成,可以到指定的文件路径中看到歌曲文件:
到此为止,列表中20首歌曲就被下载到本地了。
如果觉得《python爬取音乐网站排行榜_通过Python轻松访问音乐网站歌曲 python 爬取》对你有帮助,请点赞、收藏,并留下你的观点哦!