需求:突然奇想,获取网易云音乐 我的喜欢 歌单音乐数据
获取歌曲详情 如标题,歌手,时长,专辑等等
思路:爬虫请求url 获取数据,找到对的链接请求就成功了一半,查看返回数据,然后保存数据(歌曲+歌手 拼接完成),也可以进行下载之类的操作,爬虫进行伪装,增加Referer头,User-Agent等等
工具:Python3.7 + Pycharm
模块:BeautifulSoup + requests + lxml
1、打开网页版网易云音乐
2、打开 我喜欢的音乐(点击第一步中的头像图片即可进入)
3、打开调试工具(浏览器上方的链接不可信,要自己找歌曲列表链接)
4、查看返回的数据
5、目前仅返回有限的数据,开始撸代码
import requestsfrom bs4 import BeautifulSoupimport urllib.requestfrom lxml import htmletree = html.etreeheaders = {"Referer": "/","Host": "","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 = "/playlist?id=******&userid=******"# 请求urlresponse = 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 = '/song/media/outer/url' + music['href'][5:] + '.mp3'musicName = music.textmusic_list.append(musicName)music_list.append(musicUrl)# 全部歌曲信息放在lists列表中lists.append(music_list)# lists = str(lists)# 保存歌曲名称以及歌曲urlwith 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生成的数据,暂时没有办法去获取到,需要进行研究研究(想要直接保存网页,然后进行提取数据,但是没有正确的请求接口),若有不足,虚心请教
参考链接:/p/4e96f8466261
参考链接2:/qq_43590972/article/details/101344918