Python 爬虫下载喜马拉雅音频文件

640?wx_fmt=jpeg

阅读文本大概需要 5 分钟

学习,是一个长期的过程。学习的方式也是有很多种的,在家里时间有空闲时间的话可以选择读书,如今在手机上看电子书也方便。pk哥最近看电子书比较多,感觉自己的视力明显下降了。停下来不学习又不行,我想到用听的方式去学习,如今各平台上音频文件还是比较丰富的。大家听得比较多的应该就是喜马拉雅这个平台了。今天我用 Python 把喜马拉雅的音频通过输入关键字查询出来并下载保存在本地。

保存效果

我通过「腾讯传」关键字查询出 6 个音频专辑,以下为其中一个专辑里的 7 个音频文件。

640?wx_fmt=png

项目环境

语言:Python3

程序结构

640?wx_fmt=png

程序主要由四部分组成:

  • gethtml():提取页面 html 信息。

  • getid():获取通过关键字搜索的音频专辑 ID 列表。

  • downm4a():下载对应专辑 ID 下的音频文件。

  • mkdir():把下载的音频保存到相应的文件夹中。

页面分析

我们要下载音频文件,首先我们得要找到下载音频的 url,我们打开浏览器自带的调试工具(我用的是 Chrome),通过快捷键 F12 可快速打开调试工具。调试器切到 Network,我以我最近刚看完的「腾讯传」为例,点击专辑封面中间的播放按钮,该专辑中音频信息中都在 json 格式的数据中。一共有 7 个音频文件。

640?wx_fmt=png

任意展开一个音频的详细信息,详细信息包括了音频文件的标题和下载链接。找到了音频的下载链接就可以下载音频了,接下来的工作的都围绕怎么获取音频文件的下载链接展开。

640?wx_fmt=png

获取页面源码

我们先定义一个获取页面 html 信息的函数。该函数中加入浏览器表头信息 headers,为了安全起见,用的是代理 IP,有兴趣的可以自己做个 IP 代理池,IP 失效后自动替换。

640?wx_fmt=png

获取专辑信息

接下来我们需要获取专辑的 ID,因为音频的下载链接是通过专辑 ID 拼接的,我们看下刚才包含音频文件名称和下载链接信息的 Headers,可看到专辑链接的组成中 albumId 就是专辑 ID,后面的表示当前页面数和页面最多存放的音频数。

640?wx_fmt=png

专辑的 ID 信息包含在通过关键字搜索的信息里面。

640?wx_fmt=png

通过 BeautifulSoup 在页面中提取专辑的 ID 信息,顺便也把专辑标题信息提取出来,当做等下创建专辑目录的名称,主要代码如下。

640?wx_fmt=png

获取页面数

上面的方法获取专辑 ID 信息,接下来我们需要知道专辑下共用多少页的音频文件,我们通过音频总数除以 30 来获取页面数量。音频总数的信息在音频文件列表的 data 里面,下图我用了音频文件数量比较多「明朝那些事儿」举例,一共 268 个音频文件。

640?wx_fmt=png

有了音频总数,每页的音频数量是 30 个,这样我们就可以算出页面的数量了,分为 3 种情况判断:总数小于或等于 30 个、总数大于 30 个且是 30 的倍数、总数大于 30 个且不是 30 的倍数,相关代码如下。

640?wx_fmt=png

下载音频文件

专辑 ID、专辑名称、页面数量都有了,接下来就可以下载音频文件了。下载音频时,当音频不足 30 个,需要做下异常处理。当音频文件是付费文件时,无法下载。这时做一个判断,音频的下载链接为 null 或者 None 时,跳出循环去爬取下一个专辑的文件。

640?wx_fmt=png

音频的下载链接为 null 或者 None 的情况,这里以「明朝那些事儿」为例,通过「明朝那些事儿」关键字爬取的其中一个专辑的音频文件,总共只爬取了 50 个,后面的音频文件都没有提供下载链接,所以无法下载。

640?wx_fmt=png

建立目录存放音频

为了让下载下来的音频文件有序的存放在以专辑名称命名的文件夹下,我们用代码自动创建目录并把对应文件下载到该目录下。

640?wx_fmt=png

后记

本文的目的是把喜马拉雅上免费的音频下载到本地,传到手机里,方面大家保护视力的情况下随时都可以学习。当然,流量充足的也可以在 APP 上在线听。

此项目是通过输入关键字去搜索音频专辑下载的,对于有些关键字没有对应音频的情况下,系统会把推荐音频给你,所以为了提高大家的效率,大家运行代码前,先在喜马拉雅网站输入你需要搜索的关键字,看是否有相关的音频,有的话再运行代码。一般热度比较高的音频专辑都比较靠前,下载了自己需要的音频专辑后,如果后面的专辑不需要停止运行代码即可。

源码可在公众号回复「听」获取。

推荐阅读:

人必有痴,而后有成

640?wx_fmt=jpeg

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值