Python喜马拉雅有声小说音频文件爬虫
今天爬取的是喜马拉雅有声小说。
目标网址:https://www.ximalaya.com/youshengshu/
分析操作开始:
首先在喜马拉雅有声小说页面,播放任意音频。
当播放音频时,打开抓包工具(加载网页后打开抓包工具,发现没有抓到数据包,刷新网页就行),这边选择媒体Media,一般的视频,音频文件都会在这里被抓取到。
下图就是抓到的音频文件。
我们尝试访问一下该接口的url,将url复制到浏览器打开。
发起访问后,跳转出了一个保存文件到本地的界面。
我们选择保存,发现多了一个类型为M4A的文件。
尝试播放,发现的确是之前在喜马拉雅界面中播放的有声小说音频。
通过上述操作,我们明白访问该url可直接得到相应的音频文件。
现在开始分析这个url
“https://aod.cos.tx.xmcdn.com/group58/M09/4B/2B/wKgLc1zJeDKgmWlwADxJRm7KRfE151.m4a”
一看就可以看到 这个url上全是各种加密
如果我们直接去做解密的话,这是不合适的,因为同样我们也不知道它是否真的是加密了,有可能他只是在26个英文字母和0到9个阿拉伯数字随机组成呢。
咱们不确定它是哪种加密方式,那么怎么办呢?
我们先复制他
然后在所有抓到的包中 去寻找
搜索后我们发现 出现了一个audio音频接口
我们双击后发现控制台返回的一大串数据里面数据里面有一个叫src的,就有我们刚刚看到的音频数据。
也就是说 音频是这样生成的 并不是一个加密
我们找到它的url地址以后 去访问
访问后发现他是类似于一个字典一样的储存,并且包含着刚刚的src数据,就是有声小说音频播放的地址。
整理一下思路,也就是我们可以请求这个接口然后得到一大串数据,我们在得到的一大串数据中 再提取src链接,也就是音频地址。
准备开始怼代码了,我们先创建一个py文件 和 一个存放音频数据的文件夹。
常规的基础爬虫请求,请求方式为get请求。
请求结果如下,控制台打印的数据为两个字典嵌套。
通过简单的处理,再次打印数据。
成功打印出音频文件的地址!!
这个时候我们就已经可以存储文件了,因为地址已经拿到了,但是存储文件 文件名是必不可少的,咱们回忆之前下载的音频文件。
简单思索一下 我们其实可以直接将src这个网址的末尾,作为音频文件的文件名。
通过基础的字符串切割,得到音频文件名字。
再次进行常规爬虫操作,对srd的地址发起请求。
得到16进制的,字节数据。
最后只需要进行文件存储,就可以将音频文件保存到本地了。
这个时候一个音频文件的操作已经完成。
但是!!!爬虫的优势是什么????是大批量的下载。
想要大批量的下载,就必须使得url变成动态url。
所以我们再次回到开头,选取另一个音频专辑的url对比参数。看看能不能发现规律。
重复最开始的操作播放音频,通过抓包工具抓到音频文件的接口,复制id进行搜索。
拿到url,进行比对。
比对发现 只是id不一样。那我们可以进行url拼接使得url可以动态变化。
因为我们知道了更换id就可以使得下载音频文件的url变化,下载不同的音频文件,只需要更换url的id,所以我们想办法在专栏下抓取音频文件的id。
静态数据永远比动态数据要好拿一点,我们先看看静态页面上有没有我们想要的数据。
果然不出我们所料,id就藏在这些静态数据当中。
进行简单爬虫操作,获得页面源码。
上图的url错误了,应该是某个有声小说专辑的url,而不是整个有声小说的url。正确url应该为“https://www.ximalaya.com/youshengshu/40942749/”)
为了保证数据的准确性,我们通过浏览器,截取一段页面源码,然后在pycharm打印台搜索,测试是否拿到了真实的页面源码。
在获取到的数据中搜索,成功搜索到了匹配的内容,证明我们的确获得到了 页面的真实源码。
抓取id,用它的类选择器。
完美!成功打印出之前所需要的id。
这时仔细的同学应该已经发现,每个章节的音频名字就在id的旁边。
我们顺手再降名字也一起抓取。
参数都拿到了,我们将之前保存音频的代码封装成一个函数。
然后将刚刚拿到的,name和id传过去。为了保证准确性中途可以多次打印来测试。
这里整个喜马拉雅爬虫算是完工了,输入这里直接input的专题的url就好了,但是小编发现,输入url后必须敲两个空格再回车,不然会直接从浏览器访问网址了。
因为多输入了两个空格,我们只需要进行简单的字符串操作,再将url传入之前函数里面,我们的爬虫就算是完成了!!!!!!
下面附上源码:
# -*- endoding: utf-8 -*-
# @ModuleName:喜马拉雅
# @Function(功能):
# @Author : 苏穆冰白月晨
# @Time : 2021/3/17 9:52\"""喜马拉雅音频爬虫"""
import requests
from pyquery import PyQuery as pq #局部搜索headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'
}def request_mp3(id, name):"""保存音频文件"""url = "https://www.ximalaya.com/revision/play/v1/audio?id={}&ptype=1".format(id)print(url)response = requests.get(url,headers=headers).json()data = response['data']['src']mp3 = requests.get(data,headers=headers)f = open('./音频文件/' +name, 'ab' ) #文件路径 文件读写方式 a文件追加(不存在新建) b进制文件f.write(mp3.content)f.close()def main(urls):response = requests.get(urls,headers=headers).textdoc = pq(response)"""<a title="神棍下山记 001 如此师徒(免费收听,福利多多,订阅不迷路)" href="/youshengshu/40942749/328847758"><span class="title lF_">神棍下山记 001 如此师徒(免费收听,福利多多,订阅不迷路)</span></a>"""text1 = doc(".text.lF_ a").items()for i in text1:id1 = i.attr("href").split('/')[3]name = i.attr("title").split('(')[0]print(id1)print(name)request_mp3(id1, name)if __name__ == '__main__':urls1 = input(r"请输入专辑的url: ").split(" ")urls = urls1[0]main(urls)
如果对您有帮助可以的话关注一下公众号:Python网络小蜘蛛
Python喜马拉雅有声小说音频文件爬虫相关推荐
- python:PDF转音频文件--有声读物(附完整源码)
python:PDF转音频文件--有声读物 import pyttsx3 import pyPDF2 book = open('book.pdf','rb') pdfreader = pyPDF2.P ...
- Python爬取喜马拉雅有声小说【转载】
话不多说 直接上源码 爬取喜马拉雅有声小说-夜惊魂 import re import os import json import requests def Night_fright(): start_ ...
- python 喜马拉雅_Python爬虫入门教程14:喜马拉雅有声书音频爬取
基本开发环境????Python 3.6 Pycharm 相关模块的使用????import requests import os 安装Python并添加到环境变量,pip安装需要的相关模块即可. 一 ...
- 用Python制作有声小说
作者:菜鸟哥 来源:程序员GitHub 大家好,欢迎来到 「Python数据之道」 ! 有不少朋友都热衷于看小说.俗话说:小说阅读一时爽,一直阅读一直爽.但是小说阅读时间久了,会给我们的眼睛带来很严重 ...
- 爬取听书网有声小说音频数据
前言: 朋友最近迷上了听有声小说,可是因为很多的有声小说网站都需要vip才能听,所以他想让我帮他把小说弄下来,方便他可以随时在手机上听.我在网上搜了一下他听的这部小说,的确有很多大的听书网站都需要vi ...
- 越来越好玩,用ChatGPT+Python 做有声小说!
菜鸟学Python-第623篇原创 现在我们几百人的会员群已经玩的越来越高级了,利用chatgpt花色玩法!有玩百度问一问每天早上6点多起来抢单的,有玩微信机器人帮人部署接单的,也有玩咸鱼去给大学生指 ...
- 从喜马拉雅听下载音频文件
环境:64位win7+Python 3.6+Eclipse+Pydev 分析喜马拉雅格式 以乡村爱情9为例,分析下载路径: 打开连接路径,调用chrome里的开发者工具,(更多工具-->开发者工 ...
- Python使用傅里叶变换调整音频文件音量
功能描述: 调整音频文件音量. 相关技术: 如果使用扩展库moviepy的话,可以直接调整音量,见 Python视频处理案例六则:旋转视频.调整音量/播放速度.淡入淡出.插入转场素材 如果是没压缩的波 ...
- 使用python讲二进制转换为音频文件_Python使用ffmpy将amr格式的音频转化为mp3格式的例子...
最近做了一个项目,将从微信下载的音频文件(默认为.amr格式)转化为mp3格式(否则前端播放将会遇到困难)上传到云端.经过一番研究,最终决定采用Python的ffmpy包. 安装只需执行 pip in ...
最新文章
- Android中View绘制流程以及invalidate()等相关方法分析
- android开发学习 ------- 弹出框
- 使用java的html解析器jsoup和jQuery实现一个自动重复抓取任意网站页面指定元素的web应用...
- boost::function用法的测试程序
- android 高级项目,从零开始的Android新项目8 - Data Binding高级篇
- 只读方式挂载文件系统时解决方案
- Objective-C 语法
- TensorFlow零基础入门指南——计算模型、数据模型、运行模型!
- Echarts图的属性大全,学会绝对可以把Echarts吃的透透的
- 清远高考成绩查询2021年,2021年清远高考最高分多少分,历年清远高考状元
- vue脚手架搭建项目的兼容性配置
- JIRA中设置[描述]字段的默认值
- 缓存框架 EhCache 使用 3
- BiNGO的GO分析
- Linux下7z压缩解压软件区别
- 论文学习笔记 PrivateDrop: Practical Privacy-Preserving Authentication for Apple AirDrop
- MQTT QOS Retained Message
- gallery3d的源码分析——入口
- Android Studio 提示:更新 TKK 失败,请检查网络连接
- Sublist3r ---- 子域名枚举工具
热门文章
- Python学习笔记4——csv/excel文件读写保存
- 太阳直射点纬度计算公式_离太阳更近应该更热,可为什么海拔上升反而使温度更低...
- Rail-5k:一个用于轨道表面缺陷检测的真实数据集
- IT职业规划:大公司VS小公司,怎样选择更有前途?
- 一次哔哩哔哩面试经历,看这一篇就够了!
- 微信域名被屏蔽被封了的解决办法 微信网址被屏蔽了红了照样打开
- 2022年中国版权保护中心计算机软件著作权登记最全申请步骤流程
- cf869C The Intriguing Obsession
- 整理chinaUnix上【你职业生涯中最难忘的误操作】
- 某程序员在网吧敲代码,出类拔萃,网友:为何我被打的却是我