码农公社  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爬取喜马拉雅音频数据详解相关推荐

  1. python中文意思k-对python中的*args与**kwgs的含义与作用详解

    在定义函数的时候参数通常会使用 *args与**kwgs,形参与实参的区别不再赘述,我们来解释一下这两个的作用. *args是非关键字参数,用于元组,**kw是关键字参数 例如下面的代码 def fo ...

  2. dicom多帧转换_Python解析多帧dicom数据详解

    概述 pydicom是一个常用python DICOM parser.但是,没有提供解析多帧图的示例.本文结合相关函数和DICOM知识做一个简单说明. DICOM多帧数据存储 DICOM标准中关于多帧 ...

  3. python中列表数据类型_Python数据类型之List列表实例详解

    本文实例讲述了Python数据类型之List列表.分享给大家供大家参考,具体如下: list列表 1.概述: 通过之前的学习,我们知道变量可以存储数据,但是一个变量只能存储一个数据,现在有一个班级,班 ...

  4. python中linspace函数_python的range和linspace使用详解

    在python中要产生一个数字序列,最快的方法就是使用range和linspace函数,但是这两者不太一样,但总的来说实现的效果是一致的,都能获取一个数字序列. range range一看其名就知道是 ...

  5. python中values作用_Python values()与itervalues()的用法详解

    dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value: d = { 'Adam': 95, 'Li ...

  6. 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 ...

  7. python中反三角函数用法_Python入门之三角函数atan2()函数详解

    python 的 Python入门之三角函数atan2()函数详解 描述 atan2() 返回给定的 X 及 Y 坐标值的反正切值. 语法 以下是 atan2() 方法的语法: import math ...

  8. python对输入的字符串进行解析_python数据类型_字符串常用操作(详解)

    这次主要介绍字符串常用操作方法及例子 1.python字符串 在python中声明一个字符串,通常有三种方法:在它的两边加上单引号.双引号或者三引号,如下: name = 'hello' name1 ...

  9. python如何调用文件进行换位加密_python 换位密码算法的实例详解

    python 换位密码算法的实例详解 一前言: 换位密码基本原理:先把明文按照固定长度进行分组,然后对每一组的字符进行换位操作,从而实现加密.例如,字符串"Error should neve ...

  10. beautifulsoup爬取网页中的表格_PYTHON爬取数据储存到excel

    PYTHON爬取数据储存到excel 大家周末好呀,我是滑稽君.前两天上网课时朋友发来消息说需要爬取一些数据,然后储存到excel里.记得我公众号里发过关于爬虫的文章,所以找我帮个忙.于是滑稽君花时间 ...

最新文章

  1. BZOJ4152 AMPPZ2014 The Captain(最短路)
  2. UITextFile
  3. 大数据与智能算法(一-基础技术)-SMU在线学习笔记
  4. MT6580启动流程
  5. root能写入东西,其它账号不能写,可能的原因
  6. 调用高德逆地理接口_地理编码与逆地理编码
  7. ios13.5正式版信号怎样?
  8. python中使用matplotlib问题
  9. php mysqli分页,PHP使用Mysqli类库实现完美分页效果的方法_PHP
  10. XML文件解析 --------------------笔记
  11. 网关串口+EM310
  12. 基于单片机的电子万年历的设计
  13. HDLBits练习——Exams/ece241 2013 q7
  14. poj 1703 poj 2492 并查集 桥梁判AB组
  15. 2016年新运维:论《普通运维人员就是秋后的蚂蚱》
  16. jquery获取元素四种方式。
  17. 三级管的三种工作状态
  18. C++ Primer Plus-note
  19. 同程学生卡怎么开通,开通同程旅行学生会员开通方法
  20. 《MySQL 入门教程》第 06 篇 备份与恢复

热门文章

  1. php 发 语音验证码,php语音验证码接口_php语音接口_php语音验证码_语音验证码代码示例_达信通...
  2. make makefile cmake qmake都是什么,有什么区别
  3. flex布局 gird布局
  4. Android TV使用gsyVideoPlayer快进操作视频会回退
  5. idea下配置tomcat运行jpress
  6. 如何看待CS院校正式推免鸽人紧急补录的混乱局面?
  7. 干货:饿了么交易系统的重构和实战
  8. IEEE浮点数尾数向偶舍入-四舍六入五成双
  9. 基于STM32F103——DS1302日期时间+串口打印
  10. 为什么不推荐大家去外包公司