Python爬虫之批量下载喜马拉雅音频

作者:wangzirui32 时间:2022-09-25 20:18:27 

一、解析网站

1.1 获取音频地址

在喜马拉雅网站上,随便点开一个音频,打开“开发者工具”,再点击播放按钮,可以看到出现了多个请求:

Python爬虫之批量下载喜马拉雅音频

经过排查,发现可疑url:

Python爬虫之批量下载喜马拉雅音频

查看它的响应信息,发现音频地址就在里面:

Python爬虫之批量下载喜马拉雅音频

接下来,解析这个返回音频地址的url:


https://www.ximalaya.com/revision/play/v1/audio?id=348451879&ptype=1

发现url中的id参数就决定了返回的音频地址,而id参数是音频的id号。

1.2 解析专栏网页

我们已经知道了获取音频url的网址,接下来要获取一个专栏内的音频id和名称,打开一个专栏,发现:

Python爬虫之批量下载喜马拉雅音频

所有的音频存放在class为1F_的li标签中,再来解析li标签:

Python爬虫之批量下载喜马拉雅音频

在li标签中的第一个a标签存储着我们所有需要的数据,妙~啊!

1.3 整理亿下思路

思路:

1.获取专栏内的li标签

2.获取li标签里的第一个a标签

3.读取a标签的title和href属性

4.将href解析成音频id

5.将id带入url请求音频源地址

6.提取音频源地址

7.请求音频源地址

8.保存音频(文件名为a的title属性)

思路整理完了,开始编写代码。

二、编写爬取代码

代码奉上——


import requests
from fake_useragent import UserAgent as ua
from bs4 import BeautifulSoup as bs

# 专栏地址
music_list_url = 'https://www.ximalaya.com/ertongjiaoyu/19702607/'
# 获取音频地址的url
get_link_url = "https://www.ximalaya.com/revision/play/v1/audio"

# UA伪装
headers = {
   "User-Agent": ua().random
}

# 参数
params = {
   "id": None,    # id先设为None
   "ptype": "1",
}

# 获取专栏HTML源码
music_list_r = requests.get(music_list_url, headers=headers)
# 解析 获取所有li标签
soup = bs(music_list_r.text, "lxml")
li = soup.find_all("li", {"class": "lF_"})

# for循序遍历处理
for i in li:
   a = i.find("a")   # 找到a标签
   # 获取href属性
   # split("/")将字符串以"/"作为分隔符 从右往左数第一项是id号
   music_id = a.get("href").split("/")[-1]
   # 获取title属性 和“.m4a”拼接成文件名
   music_name = a.get("title") + ".m4a"

# 修改请求参数id
   params['id'] = music_id

# 获得音频源地址
   r = requests.get(get_link_url, headers=headers, params=params)
   link = r.json()['data']['src']

# 获取音频文件并保存
   music_file = requests.get(link).content
   with open(music_name, "wb") as f:
       f.write(music_file)

print("下载完毕!")

运行代码,等待亿会(真的要等亿会),可以看到当前目录下已经出现了音频文件,如图:

Python爬虫之批量下载喜马拉雅音频

来源:https://blog.csdn.net/wangzirui32/article/details/116888540

标签:Python,批量下载,喜马拉雅,音频
0
投稿

猜你喜欢

  • 影响SEO的页面制作细节

    2008-10-18 16:06:00
  • Python3.5字符串常用操作实例详解

    2023-08-31 00:25:53
  • Go位集合相关操作bitset库安装使用

    2024-05-09 14:57:22
  • Django中Middleware中的函数详解

    2023-08-30 06:58:30
  • 用js封装的时间设置器

    2013-08-04 23:28:46
  • vue 使用鼠标滚动加载数据的例子

    2024-05-28 15:42:21
  • 设置python3为默认python的方法

    2023-07-11 19:24:49
  • python加速器numba使用详解

    2022-02-27 15:24:22
  • PyQt5+python3+pycharm开发环境配置教程

    2022-11-03 03:34:11
  • MySQL获取所有分类的前N条记录

    2024-01-21 09:39:27
  • 跟老齐学Python之啰嗦的除法

    2022-12-18 12:47:38
  • 解决Jstree 选中父节点时被禁用的子节点也会选中的问题

    2023-09-03 06:56:01
  • MAC系统中添加MYSQL开机启动的方法

    2024-01-13 01:52:53
  • PyQt5中QTimer定时器的实例代码

    2021-06-01 07:28:54
  • 从对象列表中获取一个对象的方法,依据关键字和值

    2024-05-22 10:40:02
  • 深入理解JSON数据源格式

    2024-05-10 14:06:09
  • python使用rsa非对称加密过程解析

    2021-06-15 00:14:51
  • python+opencv 读取文件夹下的所有图像并批量保存ROI的方法

    2021-02-23 13:07:23
  • mysql数据库忘记管理员密码的解决方法

    2024-01-24 10:56:55
  • Python中的文本相似度的计算方法总结

    2021-02-08 08:40:37
  • asp之家 网络编程 m.aspxhome.com