这段代码是一个用于下载喜马拉雅音频的脚本,它首先发送一个GET请求获取特定链接上的页面内容,然后使用正则表达式从页面内容中提取音频的id和标题,再使用提取到的id获取音频的URL并下载到本地。以下是代码的完整版本:
import requests
import re
# 需要下载音乐的链接
link = 'https://www.ximalaya.com/album/68607356'
# 设置请求头,模拟浏览器访问
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}
# 发送GET请求,获取网页的响应
response2 = requests.get(url=link, headers=headers).text
# 使用正则表达式提取音乐的id和标题
pattern = r'"index":\d+,"trackId":(?P<id>\d+),"isPaid":false,"tag":0,"title":"(?P<title>.*?)"'
trackid = re.compile(pattern)
result = trackid.finditer(response2)
# 遍历匹配结果,获取音乐id和标题
for item in result:
id = item.group('id')
title = item.group('title')
url = f'https://www.ximalaya.com/revision/play/v1/audio?id={id}&ptype=1'
response = requests.get(url=url, headers=headers)
data_list = response.json()
src_url = data_list['data']['src']
print(title, src_url)
# 下载音乐文件
music = requests.get(url=src_url, headers=headers).content
# 将音乐文件保存到本地的'video'目录下
with open('video\\' + title + '.m4a', mode='wb') as f:
f.write(music)
print('音频下载完成:', title)
需要注意以下几点:
- 代码使用正则表达式从页面内容中提取音频的id和标题,这种方法对于页面结构变化较大的情况可能会出现问题,建议考虑使用更稳定的方法,比如使用BeautifulSoup来解析页面。
- 代码中使用了喜马拉雅的API来获取音频的URL,这种方式比直接解析页面更稳定,但请注意喜马拉雅的API使用规则,避免滥用。
- 代码中使用
headers
模拟浏览器访问,这可以防止一些网站的反爬虫机制,但仍然需要注意尊重网站的使用规则。 - 代码中将音频保存在’video’目录下,如果你的工作目录中没有这个目录,需要先创建。
最后,请确保你的爬取行为是合法、合规的,并且尊重网站的使用条款。
评论前必须登录!
注册