喜马拉雅里的音频文件要怎么批量下载下来?
<span id="a26b84ef-0dae-4976-93c3-36a500640275" style="font-size:18px;margin:20px 0px;text-align:left;"><h2 id="3f2b4911-b32d-4e33-8d1e-a49f078834fc" style="font-size:20px;margin:20px 0px;font-weight:700;">前言</h2><p id="cca7a9d7-2b71-4d7f-9cbe-adeea7ceb99a" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">嗨喽!大家好呀,这里是魔王~</p><h2 id="ae3378b3-6e60-4b5a-88cf-df3ba5073c97" style="font-size:20px;margin:20px 0px;font-weight:700;">环境介绍</h2><ul id="1b598a1d-5efd-4e64-aeb2-0256636fed83" style="font-size:18px;margin:20px 0px;text-align:left;"><li id="66f87c72-ee8b-451d-8d30-6a2983065d56" style="font-size:18px;margin:20px 0px;text-align:left;">python 3.8</li><li id="f3e15434-81c5-4e45-843a-0955282f23b7" style="font-size:18px;margin:20px 0px;text-align:left;">pycharm</li></ul><h2 id="0f4e3f00-8cea-4629-bb76-daa276f873d3" style="font-size:20px;margin:20px 0px;font-weight:700;">模块使用</h2><ul id="2879ae53-138d-4246-b193-02579a5070b5" style="font-size:18px;margin:20px 0px;text-align:left;"><li id="5d3d0267-71c7-412e-9694-8345023dc43e" style="font-size:18px;margin:20px 0px;text-align:left;">requests >>> 数据请求模块 第三方模块 pip install requests</li><li id="3bb49a7a-17ad-46c1-b0de-18ec57641ce7" style="font-size:18px;margin:20px 0px;text-align:left;">re >>> 正则表达式 解析数据 内置模块 不需要安装</li></ul><p id="013536f3-727d-4cbb-afca-3208e41143f5" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">win + R 输入cmd 输入安装命令 pip install 模块名 如果出现爆红 可能是因为 网络连接超时 切换国内镜像源</p><h2 id="16bbbd1c-8f77-4563-84e8-7d8326a9ba2e" style="font-size:20px;margin:20px 0px;font-weight:700;">如果你想要去实现一个爬虫案例, 你会怎么去做?</h2><p id="b4664c61-c87e-4c3d-b0a9-d84de0597f84" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">分析: 分析我们想要的数据是从哪来可以获得... 音频url</p><h2 id="aa6703fa-b7c2-468d-908f-65f8c8eeeb1d" style="font-size:20px;margin:20px 0px;font-weight:700;">通过开发者工具进行抓包分析</h2><ol id="32ad5840-9653-4ee3-887e-f3d91b60f993" style="font-size:18px;margin:20px 0px;text-align:left;"><li id="c891df5a-df3f-47ff-9a72-ebcf34703d4a" style="font-size:18px;margin:20px 0px;text-align:left;">找到音频url地址</li><li id="0cb3a5f2-6ded-4b61-a199-fb40e9350ced" style="font-size:18px;margin:20px 0px;text-align:left;">找到音频数据包这个数据包里面就包含了我们想要音频url地址</li><li id="d2f2bf1c-6d1f-4952-bd1f-3a89b8ceeffe" style="font-size:18px;margin:20px 0px;text-align:left;">对比数据包请求参数变化规律 每一个音频都是有其对应的音频ID</li><li id="1ebf9395-da8f-4825-ab20-0e51bf27db12" style="font-size:18px;margin:20px 0px;text-align:left;">通过开发者工具 搜索ID 查询ID来源... 网页源代码里面就有我们想要音频ID</li></ol><p id="134b2fc8-a5b6-4cfb-a337-ef7d332c8f2a" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">写代码目的 最终为了获取音频url >>> 音频数据包 >>> 得到音频ID</p><h2 id="80d18a68-57ee-4d4c-b1a4-1d6712f4c437" style="font-size:20px;margin:20px 0px;font-weight:700;">代码实现步骤: 爬虫是模拟浏览器对于url地址发送请求, 从而获取数据</h2><h3 id="a78c05d2-7758-4f14-816a-190fc57c7127" style="font-size:20px;margin:20px 0px;font-weight:700;">一. 第一次请求, 为了获取音频ID以及音频标题</h3><ol id="e68dd9e1-3b01-4f85-885e-c444fd7030e1" style="font-size:18px;margin:20px 0px;text-align:left;"><li id="5fceaf80-c62f-461e-8df6-e7dd58670d8a" style="font-size:18px;margin:20px 0px;text-align:left;">发送请求, 对于音频目录页面发送请求</li><li id="0e804486-e7d2-4c7c-88c9-4371c28162b7" style="font-size:18px;margin:20px 0px;text-align:left;">获取数据, 获取服务器返回响应数据</li><li id="f527e850-7e73-4d09-b62e-25b08372fcc1" style="font-size:18px;margin:20px 0px;text-align:left;">解析数据, 提取我们想要音频ID以及音频标题</li></ol><h3 id="f44d3a79-3289-4031-9cc4-0f0390681215" style="font-size:20px;margin:20px 0px;font-weight:700;">二. 第二次请求, 为了获取音频url地址</h3><ol id="09043831-2b04-46f5-8f29-bf96e4efd2fc" style="font-size:18px;margin:20px 0px;text-align:left;"><li id="b26f3561-60b5-4146-b15b-9943f1a118c0" style="font-size:18px;margin:20px 0px;text-align:left;">发送请求, 对于音频数据包发送请求</li><li id="213000f2-64b2-4d42-bc5b-a533c1924ae9" style="font-size:18px;margin:20px 0px;text-align:left;">获取数据, 获取服务器返回响应数据</li><li id="c536720b-ae92-4c7f-83d2-70e2d5d0c797" style="font-size:18px;margin:20px 0px;text-align:left;">解析数据, 提取音频url地址</li></ol><h3 id="b7788a9f-f3bc-4f44-b425-e5cfee973af3" style="font-size:20px;margin:20px 0px;font-weight:700;">三. 第三次请求, 为了获取音频二进制数据, 从而进行保存</h3><ol id="0f221e47-45a1-4a67-ace6-fc8a8af6fa34" style="font-size:18px;margin:20px 0px;text-align:left;"><li id="44e4f0e0-aaca-4a45-9764-bbf2de0514e9" style="font-size:18px;margin:20px 0px;text-align:left;">保存数据</li></ol><h2 id="3ef9b088-21d4-48e6-a0ed-6711332e24dc" style="font-size:20px;margin:20px 0px;font-weight:700;">代码</h2><div id="83bcb1d4-ef71-4fc6-a107-e6eb80f5c4c9" style="font-size:18px;margin:20px 0px;text-align:left;"><pre id="4ec7b003-3a79-460c-aff0-aff298bedb94" style="font-size:18px;margin:20px 0px;text-align:left;"><code id="12aabf84-113d-4af5-9cea-54a2edb1d92b" style="font-size:18px;margin:20px 0px;text-align:left;">import requests 数据请求模块 第三方模块 pip install requests"""
发送请求
对于哪一个url地址发送请求, 发送什么样请求
爬虫发送请求你可以看做打电话的一个过程
import requests 工具 手机
url 电话号码
headers 信号
get 打电话的方式 座机是需要加区号 长沙0731
<response =""> 打电话通了 200 嘟嘟嘟的声音404 您所拨打电话是空号
"""
for page in range(2, 17):
url = fhttps://www.ximalaya.com/revision/album/v1/getTracksList?albumId=8625924&pageNum={page}&sort=0 唯一资源定位符
模拟浏览器 headers请求头 字典数据类型, 构建成键值对形式
headers = {
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36
}
response = requests.get(url=url, headers=headers)
print(response.text) <response =""> 响应对象 200 状态码表示请求成功 404 网址不对
re.findall() 调用re模块里面findall方法从那些数据里面, 获取什么样的数据内容 \d+ 匹配一个数字或者多个数字
audio_info = response.json()
print(audio_info)
for index in audio_info:
字符串格式化方法 {} 占位符
link = fhttps://www.ximalaya.com/revision/play/v1/audio?id={index["trackId"]}&ptype=1
print(link)
获取响应对象json字典数据
json_data = requests.get(url=link, headers=headers).json()
audio_url = json_data
"""
response.text 数据类型是字符串 响应对象文本数据
response.json() 数据类型是字典 响应对象json字典数据
response.content二进制数据内容
ctrl + alt + L 格式化代码 和网易云收藏按键以及QQ 锁定按键冲突
"""
audio_content = requests.get(url=audio_url, headers=headers).content
with open(audio\\ + index + .mp3, mode=wb) as f:
f.write(audio_content)
print(link, index)
def get_num():
lis = []
for a in range(10):
for b in range(10):
for c in range(10):
for d in range(10):
num = f{a}{b}{c}{d}
lis.append(num)
return lis
print(get_num())
string = 1111122211
string = string.replace(2, 3)
print(string)</response></response></code></pre></div><h2 id="0d761eb9-e587-4892-b58b-fb7bb22ce4c0" style="font-size:20px;margin:20px 0px;font-weight:700;">尾语</h2><p id="0a0aee97-b7bb-4e72-8c77-57c7d47f2804" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">好了,我的这篇文章写到这里就结束啦!</p><p id="3a87e48a-d19f-4a36-9dac-3182f39e62bf" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">有更多建议或问题可以评论区或私信我哦!一起加油努力叭(ง •_•)ง</p><p id="79b6499a-4665-41f3-a9b2-ce646f63b469" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!</p></span>
页:
[1]