爬取网易云音乐
打开 网易云音乐,打开一个歌单:
F12 查看网页源代码,我们利用传统的方式查看网页源代码的时候发现没有我们想要获取的元素,这个时候我们需要点击 Network 到里面查询我们需要的数据。在 Doc 下我们可以看到有一个 playlist?id
的文件和 song?id=
的文件 , 尝试着请求第一个文件来获取歌曲的id。
获取列表音乐的 id。
import requests
from lxml import etree
import re
url = 'https://music.163.com/playlist?id=888163670'
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
'referer':'https://music.163.com/'
}
page = requests.get(url,headers=headers)
page.text
获取到页面后,我们可以利用正则表达式或者是 xpath
语法过滤我们需要的内容。
利用正则表达式:
pat = re.compile(r'/song\?id=(\d+)">(.*?)</a>')
pat.findall(page.text)
结果:
[('1468192805', '世界上不存在的歌 (2020重唱版)'),
('1468738841', 'Stay With You (英文版)'),
('1469601898', '粉红色的回忆'),
('1468507490', '沙发里有沙发Radio'),
('1468158074', '梦剧院'),
('1468998724', '清风徐来 (2020重唱版)'),
('1469628663', 'RAPSTAR'),
('1469058069', '闲野人间'),
('1469041281', '很久很久'),
('1463458838', '飒')]
当我们点开列表中的其中一首歌的时候。
同样我们在网页源代码中也可以看到同样的 url
(通常利用此处的 Request URL )
可以看到每首歌都有自己的 id , 我们可以根据上一步获取的 id 来获取每一首歌,但是有了每首歌的 url 后,我们是不能下载的,如何下载呐?
解决方案:利用外链转换工具,将每首歌的 url 转化为可下载的链接:
外链转换工具:https://link.hhtjim.com/
我们将上面歌曲的 url 粘贴到里面进行提交,可以看到它给我们生成了一个外链,
将生成的外链复制到浏览器,获取到:
同样分析可以得到:不同歌曲生成的外链只是后面 id 部分不同。
获取音乐的下载链接:
wl = 'https://link.hhtjim.com/163/{}.mp3'
for id, name in pat.findall(page.text):
url = wl.format(id)
print(url,name)
https://link.hhtjim.com/163/1468192805.mp3 世界上不存在的歌 (2020重唱版)
https://link.hhtjim.com/163/1468738841.mp3 Stay With You (英文版)
https://link.hhtjim.com/163/1469601898.mp3 粉红色的回忆
https://link.hhtjim.com/163/1468507490.mp3 沙发里有沙发Radio
https://link.hhtjim.com/163/1468158074.mp3 梦剧院
https://link.hhtjim.com/163/1468998724.mp3 清风徐来 (2020重唱版)
https://link.hhtjim.com/163/1469628663.mp3 RAPSTAR
https://link.hhtjim.com/163/1469058069.mp3 闲野人间
https://link.hhtjim.com/163/1469041281.mp3 很久很久
https://link.hhtjim.com/163/1463458838.mp3 飒
有了外链我们就可以进行音乐的下载:
wl = 'https://link.hhtjim.com/163/{}.mp3'
for id, name in pat.findall(page.text):
url = wl.format(id)
song = requests.get(url,headers=headers).content # 获取音乐的二进制文件
name = name+".mp3"
with open(f'./网易云音乐/{name}','wb') as file:
file.write(song)
print(name,'下载完毕')
世界上不存在的歌 (2020重唱版).mp3 下载完毕
Stay With You (英文版).mp3 下载完毕
粉红色的回忆.mp3 下载完毕
沙发里有沙发Radio.mp3 下载完毕
梦剧院.mp3 下载完毕
清风徐来 (2020重唱版).mp3 下载完毕
RAPSTAR.mp3 下载完毕
闲野人间.mp3 下载完毕
很久很久.mp3 下载完毕
飒.mp3 下载完毕