需求:突然奇想,获取网易云音乐 我的喜欢 歌单音乐数据
获取歌曲详情 如标题,歌手,时长,专辑等等
思路: 爬虫请求url 获取数据,找到对的链接请求就成功了一半,查看返回数据,然后保存数据(歌曲+歌手 拼接完成),也可以进行下载之类的操作,爬虫进行伪装,增加Referer头,User-Agent等等
工具: Python3.7 + Pycharm
模块: BeautifulSoup + requests + lxml
1、 打开网页版网易云音乐
2、 打开 我喜欢的音乐(点击第一步中的头像图片即可进入)
3、 打开调试工具(浏览器上方的链接不可信,要自己找歌曲列表链接)
4、 查看返回的数据
5、 目前仅返回有限的数据,开始撸代码
import requests
from bs4 import BeautifulSoup
import urllib.request
from lxml import html
etree = html.etree
headers = {
"Referer": "https://music.163.com/",
"Host": "music.163.com",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edg/81.0.416.72",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
}
# 歌单url 通过网易云获取自己的链接
play_url = "https://music.163.com/playlist?id=******&userid=******"
# 请求url
response = requests.get(play_url, headers=headers).content
# 使用bs4匹配出对应的歌曲名称以及地址
s = BeautifulSoup(response, "lxml")
main = s.find("ul", {"class": "f-hide"})
# print(main.find_all("a"))
lists = []
for music in main.find_all("a"):
music_list = []
musicUrl = 'http://music.163.com/song/media/outer/url' + music['href'][5:] + '.mp3'
musicName = music.text
music_list.append(musicName)
music_list.append(musicUrl)
# 全部歌曲信息放在lists列表中
lists.append(music_list)
# lists = str(lists)
# 保存歌曲名称以及歌曲url
with open("music_list.txt", "a", encoding="utf-8") as f:
f.write(musicName + "-" + musicUrl + "\n")
# 下载列表中的全部歌曲,并以歌曲名命名下载后的文件,文件位置为当前文件夹
"""
for i in lists:
url = i[1]
name = i[0]
try:
print('正在下载', name)
#这里修改路径,随便指定盘符
urllib.request.urlretrieve(url, 'F:/歌曲/%s.mp3' % name)
print('下载成功')
except:
print('下载失败')
"""
总结: 只能说获取到一些数据,而且写法粗糙,也没有封装函数等,由于嵌套网页iframe的原因,使用js生成的数据,暂时没有办法去获取到,需要进行研究研究(想要直接保存网页,然后进行提取数据,但是没有正确的请求接口),若有不足,虚心请教
参考链接:https://www.jianshu.com/p/4e96f8466261
参考链接2:https://blog.csdn.net/qq_43590972/article/details/101344918