首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

阅读文本大概需要 5 分钟

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

保存效果

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

项目环境

语言:Python3

编辑器:Pycharm

程序结构

程序主要由四部分组成:

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

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

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

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

页面分析

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

获取页面源码

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

获取专辑信息

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

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

获取页面数

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

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

下载音频文件

建立目录存放音频

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

后记

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

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

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

人必有痴,而后有成

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181017A0JGOO00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券