python爬取app中的音频_Python爬取喜马拉雅音频数据详解
码农公社 210.net.cn 210是何含义?10月24日是程序员节,1024 =210、210既
210
之意。
Python爬取喜马拉雅音频数据详解
一、项目目标
爬取喜马拉雅音频数据
受害者地址:https://www.ximalaya.com/
二、本文知识点:
1、系统分析网页性质
2、多层数据解析
3、海量音频数据保存
三、环境:
1.确定数据所在的链接地址(url)
2.通过代码发送url地址的请求
3.解析数据(要的, 筛选不要的)
4.数据持久化(保存)
四、案例思路:
1. 在静态数据中获取音频的id值
2. 发送指定id值json数据请求(src)
3. 从json数据中解析音频所对应的URL地址 开始写代码
五、先导入所需的模块
import requests
import parsel # 数据解析模块
import re
六、开始干坏事
1.确定数据所在的链接地址(url) 逆向分析 网页性质(静态网页/动态网页)
打开开发者工具,播放一个音频,在Madie里面可以找到一个数据包
复制URL,搜索
找到ID值
继续搜索,找到请求头参数
url = 'https://www.ximalaya.com/youshengshu/4256765/p{}/'.format(page)
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
2.通过代码发送url地址的请求
response = requests.get(url=url, headers=headers)
html_data = response.text
3.解析数据(要的, 筛选不要的) 解析音频的 id值selector = parsel.Selector(html_data)
lis = selector.xpath('//div[@class="sound-list _is"]/ul/li')
for li in lis:
try:
title = li.xpath('.//a/@title').get() + '.m4a'
href = li.xpath('.//a/@href').get()
# print(title, href)
m4a_id = href.split('/')[-1]
# print(href, m4a_id)
# 发送指定id值json数据请求(src)
json_url = 'https://www.ximalaya.com/revision/play/v1/audio?id={}&ptype=1'.format(m4a_id)
json_data = requests.get(url=json_url, headers=headers).json()
# print(json_data)
# 提取音频地址
m4a_url = json_data['data']['src']
# print(m4a_url)
# 请求音频数据
m4a_data = requests.get(url=m4a_url, headers=headers).content
new_title = change_title(title)
4.数据持久化(保存)with open('video\' + new_title, mode='wb') as f:
f.write(m4a_data)
print('保存完成:', title)
最后还要处理文件名非法字符def change_title(title):
pattern = re.compile(r"[/\:*?"<>|]") # '/ : * ? " |'
new_title = re.sub(pattern, "_", title) # 替换为下划线
return new_title
完整代码
import re
import requests
import parsel # 数据解析模块
def change_title(title):
"""处理文件名非法字符的方法"""
pattern = re.compile(r"[/\:*?"<>|]") # '/ : * ? " |'
new_title = re.sub(pattern, "_", title) # 替换为下划线
return new_title
for page in range(13, 33):
print('---------------正在爬取第{}页的数据----------------'.format(page))
# 1.确定数据所在的链接地址(url) 逆向分析 网页性质(静态网页/动态网页)
url = 'https://www.ximalaya.com/youshengshu/4256765/p{}/'.format(page)
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
# 2.通过代码发送url地址的请求
response = requests.get(url=url, headers=headers)
html_data = response.text
# print(html_data)
# 3.解析数据(要的, 筛选不要的) 解析音频的 id值
selector = parsel.Selector(html_data)
lis = selector.xpath('//div[@class="sound-list _is"]/ul/li')
for li in lis:
try:
title = li.xpath('.//a/@title').get() + '.m4a'
href = li.xpath('.//a/@href').get()
# print(title, href)
m4a_id = href.split('/')[-1]
# print(href, m4a_id)
# 发送指定id值json数据请求(src)
json_url = 'https://www.ximalaya.com/revision/play/v1/audio?id={}&ptype=1'.format(m4a_id)
json_data = requests.get(url=json_url, headers=headers).json()
# print(json_data)
# 提取音频地址
m4a_url = json_data['data']['src']
# print(m4a_url)
# 请求音频数据
m4a_data = requests.get(url=m4a_url, headers=headers).content
new_title = change_title(title)
# print(new_title)
# 4.数据持久化(保存)
with open('video\' + new_title, mode='wb') as f:
f.write(m4a_data)
print('保存完成:', title)
except:
pass
运行代码,效果如下图
原文:http://www.cnblogs.com/hhh188764/p/14090849.html
python爬取app中的音频_Python爬取喜马拉雅音频数据详解相关推荐
- python中文意思k-对python中的*args与**kwgs的含义与作用详解
在定义函数的时候参数通常会使用 *args与**kwgs,形参与实参的区别不再赘述,我们来解释一下这两个的作用. *args是非关键字参数,用于元组,**kw是关键字参数 例如下面的代码 def fo ...
- dicom多帧转换_Python解析多帧dicom数据详解
概述 pydicom是一个常用python DICOM parser.但是,没有提供解析多帧图的示例.本文结合相关函数和DICOM知识做一个简单说明. DICOM多帧数据存储 DICOM标准中关于多帧 ...
- python中列表数据类型_Python数据类型之List列表实例详解
本文实例讲述了Python数据类型之List列表.分享给大家供大家参考,具体如下: list列表 1.概述: 通过之前的学习,我们知道变量可以存储数据,但是一个变量只能存储一个数据,现在有一个班级,班 ...
- python中linspace函数_python的range和linspace使用详解
在python中要产生一个数字序列,最快的方法就是使用range和linspace函数,但是这两者不太一样,但总的来说实现的效果是一致的,都能获取一个数字序列. range range一看其名就知道是 ...
- python中values作用_Python values()与itervalues()的用法详解
dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value: d = { 'Adam': 95, 'Li ...
- for in在python中什么意思_Python for i in range ()用法详解
for i in range ()作用: range()是一个函数, for i in range () 就是给i赋值: 比如 for i in range (1,3): 就是把1,2依次赋值给i r ...
- python中反三角函数用法_Python入门之三角函数atan2()函数详解
python 的 Python入门之三角函数atan2()函数详解 描述 atan2() 返回给定的 X 及 Y 坐标值的反正切值. 语法 以下是 atan2() 方法的语法: import math ...
- python对输入的字符串进行解析_python数据类型_字符串常用操作(详解)
这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...
- python如何调用文件进行换位加密_python 换位密码算法的实例详解
python 换位密码算法的实例详解 一前言: 换位密码基本原理:先把明文按照固定长度进行分组,然后对每一组的字符进行换位操作,从而实现加密.例如,字符串"Error should neve ...
- beautifulsoup爬取网页中的表格_PYTHON爬取数据储存到excel
PYTHON爬取数据储存到excel 大家周末好呀,我是滑稽君.前两天上网课时朋友发来消息说需要爬取一些数据,然后储存到excel里.记得我公众号里发过关于爬虫的文章,所以找我帮个忙.于是滑稽君花时间 ...
最新文章
- BZOJ4152 AMPPZ2014 The Captain(最短路)
- UITextFile
- 大数据与智能算法(一-基础技术)-SMU在线学习笔记
- MT6580启动流程
- root能写入东西,其它账号不能写,可能的原因
- 调用高德逆地理接口_地理编码与逆地理编码
- ios13.5正式版信号怎样?
- python中使用matplotlib问题
- php mysqli分页,PHP使用Mysqli类库实现完美分页效果的方法_PHP
- XML文件解析 --------------------笔记
- 网关串口+EM310
- 基于单片机的电子万年历的设计
- HDLBits练习——Exams/ece241 2013 q7
- poj 1703 poj 2492 并查集 桥梁判AB组
- 2016年新运维:论《普通运维人员就是秋后的蚂蚱》
- jquery获取元素四种方式。
- 三级管的三种工作状态
- C++ Primer Plus-note
- 同程学生卡怎么开通,开通同程旅行学生会员开通方法
- 《MySQL 入门教程》第 06 篇 备份与恢复
热门文章
- php 发 语音验证码,php语音验证码接口_php语音接口_php语音验证码_语音验证码代码示例_达信通...
- make makefile cmake qmake都是什么,有什么区别
- flex布局 gird布局
- Android TV使用gsyVideoPlayer快进操作视频会回退
- idea下配置tomcat运行jpress
- 如何看待CS院校正式推免鸽人紧急补录的混乱局面?
- 干货:饿了么交易系统的重构和实战
- IEEE浮点数尾数向偶舍入-四舍六入五成双
- 基于STM32F103——DS1302日期时间+串口打印
- 为什么不推荐大家去外包公司