python爬虫基础(一次性爬多首音乐)
文章目录
- python爬虫基础(一次性爬多首音乐)
- 发送请求
- 解析数据
- 保存数据
- 总代码
- 运行效果
- 结语
发送请求
#寻址
url = 'https://music.163.com/playlist?id=110759778'
#伪装
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
}
#发送请求
res = requests.get(url,headers=headers)
#保存地址文本内容
html_data = res.text
解析数据
这里用到我们的内置模块正则表达式 import re(当然也可以用外置模块beautifulsoup解析数据)
很明显只有id和名字不一样
那么我们只需要获取到id和名字可以了
正则表达式只需要把我们想要获取的内容改成 .*?即可
music_info = re.findall('<li><a href="/song\?id=(.*?)">(.*?)</a></li>',html_data)
注:问好前需要加\进行转意
findll表示寻找所有的这个表达式,从html_data中寻找
打印一下
可以看到我们的id和歌曲名已经返回,并返回了一个列表,可以通过索引只获取id或歌曲名。
注:由于网页版只显示10首音乐,所以只能获取到10首。
如果想要获取所有的音乐
打开开发者工具
刷新网页这样就能获得所有音乐了。
保存数据
注:http://music.163.com/media/outer/url?id=
这是网易云音乐播放的一个接口,只需要将id输入即可打开音乐。
for info in music_info:
music_url = f'http://music.163.com/media/outer/url?id={info[0]}'
打印歌曲名和地址来查看进度。
print(info[1],music_url)
# 将名字中可能出现影响的字符转为空
title = re.sub('[\\/:*?<>|]','',info[1])
# 获取音乐二进制文件
music_data = requests.get(music_url).content
with open(f'{title}.mp3','wb') as f:
f.write(music_data)
总代码
import requests #导库
import re #正则
url = 'https://music.163.com/playlist?id=110759778'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
}
res = requests.get(url,headers=headers)
html_data = res.text
music_info = re.findall('<li><a href="/song\?id=(.*?)">(.*?)</a></li>',html_data)
# 保存数据
for info in music_info:
music_url = f'http://music.163.com/media/outer/url?id={info[0]}'
print(info[1],music_url)
title = re.sub('[\\/:*?<>|]','',info[1])
music_data = requests.get(music_url).content
with open(f'{title}.mp3','wb') as f:
f.write(music_data)
运行效果
看看打印输出的内容
看看保存的文件
结语
本次分享就到这里了,感谢小伙伴的浏览,如果有什么建议,欢迎在评论区留言