python轻松爬取音乐网站歌曲

准备工作:

1.在已经安装python开发环境的情况下,还需安装第三方库:requests,安装教程可以参考:

https://blog.csdn.net/liangmengbk/article/details/106731269

 2.对目标网站进行分析,获取目标文件链接

目标网站:http://www.htqyy.com/top/hot (歌曲列表的url)

目标文件:第一页中的20个音乐文件

python轻松爬取音乐网站歌曲_第1张图片

 

获取到歌曲列表的url后,还需要获取到每个音频文件的url,找任意一首歌曲,查看网站请求的文件信息,可以找到当前文件的地址(查找文件地址的过程需要不断去尝试,不是一开始就能确定)

python轻松爬取音乐网站歌曲_第2张图片

 

有一个快速的查找方法:F12进入开发者工具后,把按类型排序由all切换成media,出现的那个就是要找的下载资源的url,如下图所示:

python轻松爬取音乐网站歌曲_第3张图片

 

验证下这个地址是不是文件的真正地址,可以把这个url放到浏览器看看:

python轻松爬取音乐网站歌曲_第4张图片

 

 音频文件开始播放了,说明这个就是想要的文件地址。

 

这个地址只是当前歌曲的文件地址,其他歌曲的文件地址需要去寻找规律,通过查看列表页面(http://www.htqyy.com/top/hot)的源代码,可以发现是通过sid属性去判断是哪首歌曲,也就是说sid是歌曲文件的唯一标识符。

python轻松爬取音乐网站歌曲_第5张图片

 

通过和上面获取到的歌曲(清晨)进行比对,发现音频文件地址中的参数包含sid的值(33),可以推测,其他歌曲只要获取到sid就能获取到对应的音频文件。

python轻松爬取音乐网站歌曲_第6张图片

 准备工作已经完成,接下来就是编写python代码,爬取文件并将音频文件保存到本地。

 

爬虫开始:

import requests
import re
import time


songIDs=[] #存放歌曲的sid
songNames=[] #存放歌曲的名称


url="http://www.htqyy.com/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="http://f2.htqyy.com/play8/"+songIDs[i]+"/mp3/6"
	songName=songNames[i]

	#请求文件地址,获取文件资源
	referer='http://www.htqyy.com/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)

程序执行过程中可以看到打印的信息:

python轻松爬取音乐网站歌曲_第7张图片

 

歌曲下载完成,可以到指定的文件路径中看到歌曲文件:

python轻松爬取音乐网站歌曲_第8张图片

到此为止,列表中20首歌曲就被下载到本地了。 

你可能感兴趣的:(python,python,爬虫,爬取歌曲,爬取音乐资源,歌曲下载)