您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python爬虫之批量下载喜马拉雅音频

51自学网 2021-10-30 22:40:01
  python
这篇教程Python爬虫之批量下载喜马拉雅音频写得很实用,希望能帮到您。

一、解析网站

1.1 获取音频地址

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

请求

经过排查,发现可疑url:

网址

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

音频地址

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

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

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

1.2 解析专栏网页

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

li标签

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

解析

在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 requestsfrom fake_useragent import UserAgent as uafrom bs4 import BeautifulSoup as bs# 专栏地址music_list_url = 'https://www.ximalaya.com/ertongjiaoyu/19702607/'# 获取音频地址的urlget_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爬虫之批量下载喜马拉雅音频的文章就介绍到这了,更多相关Python下载喜马拉雅音频内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


聊聊prod()与cumprod()区别cumsum()
浅谈dataframe两列相乘构造新特征
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。