Python爬虫:爬取喜马拉雅音频数据详解
前言
喜马拉雅是专业的音频分享平台,汇集了有声小说,有声读物,有声书,FM电台,儿童睡前故事,相声小品,鬼故事等数亿条音频,我最喜欢听民间故事和德云社相声集,你呢?
今天带大家爬取喜马拉雅音频数据,一起期待吧!!
项目目标
爬取喜马拉雅音频数据
受害者地址
https://www.ximalaya.com/
本文知识点:
- 1、系统分析网页性质
- 2、多层数据解析
- 3、海量音频数据保存
环境:
- python 3.6
- pycharm
- requests
- parsel
思路:(爬虫案例)
- 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
运行代码,效果如下图
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理
想要获取更多Python学习资料可以加QQ:2955637827私聊或加Q群630390733大家一起来学习讨论吧!
Python爬虫:爬取喜马拉雅音频数据详解的更多相关文章
- Python爬虫|爬取喜马拉雅音频
"GOOD Python爬虫|爬取喜马拉雅音频 喜马拉雅是知名的专业的音频分享平台,用户规模突破4.8亿,汇集了有声小说,有声读物,儿童睡前故事,相声小品等数亿条音频,成为国内发展最快.规模 ...
- Python爬虫实战案例:取喜马拉雅音频数据详解
前言 喜马拉雅是专业的音频分享平台,汇集了有声小说,有声读物,有声书,FM电台,儿童睡前故事,相声小品,鬼故事等数亿条音频,我最喜欢听民间故事和德云社相声集,你呢? 今天带大家爬取喜马拉雅音频数据,一 ...
- python爬虫-爬取豆瓣电影数据
#!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:27# 文件 :spider_05.py# IDE :PyChar ...
- python爬虫—爬取百度百科数据
爬虫框架:开发平台 centos6.7 根据慕课网爬虫教程编写代码 片区百度百科url,标题,内容 分为4个模块:html_downloader.py 下载器 html_outputer.py 爬取数 ...
- python爬虫爬取赶集网数据
一.创建项目 scrapy startproject putu 二.创建spider文件 scrapy genspider patubole patubole.com 三.利用chrome浏览器 ...
- Python爬虫之爬取淘女郎照片示例详解
这篇文章主要介绍了Python爬虫之爬取淘女郎照片示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 本篇目标 抓取淘宝MM ...
- 使用Python爬虫爬取网络美女图片
代码地址如下:http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip install ...
- 用Python爬虫爬取广州大学教务系统的成绩(内网访问)
用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code ...
- Python爬虫爬取全书网小说,程序源码+程序详细分析
Python爬虫爬取全书网小说教程 第一步:打开谷歌浏览器,搜索全书网,然后再点击你想下载的小说,进入图一页面后点击F12选择Network,如果没有内容按F5刷新一下 点击Network之后出现如下 ...
随机推荐
- Logstash使用mongodb插件报错: ArgumentError: wrong number of arguments (given 2, expected 1)
目录 背景 安装插件过程 背景 今天在使用logstash收集日志存储到mongodb的安装过程遇到了个错误,记录下来,错误就是下面这样: 配置文件很简单,由于是测试环境,命令行传入日志输入由ruby ...
- sublime text3配置javascript运行环境
步骤一 安装node.js 官网下载链接:node.js 步骤二 Sublime 依次点击 菜单栏 Tools => Build System => New Build System 步骤 ...
- LIKE 运算符
运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算.例如:2+3,其操作数是2和3,而运算符则是"+".在vb2005中运算符大致可以分为5种类型:算术运算符.连接运算 ...
- 抓包工具fiddler使用-初级
参考 https://kb.cnblogs.com/page/130367/#introduce
- 交换机Access、Trunk和Hybrid 接口类型及区别
交换机接口的类型可以是 Access.Trunk和Hybrid. Access类型的接口仅属于一个VLAN,只能接收.转发相应VLAN的帧: Trunk类型接口则默认属于所有VLAN,任何 Tagge ...
- FPGA 串口
VerilogHDL那些事儿_建模篇(黑金FPGA开发板配套教程) 作者:akuei2 说明:参照该书将部分程序验证学习一遍 学习时间:2014年5月3号 主要收获: 1. 对串口有初步了解: 2. ...
- CentOS中安装Docker步骤
1.安装仓库所需要的软件包 yum install -y yum-utils device-mapper-persistent-data lvm2 2.设置yum加速源 yum-config-mana ...
- 【2020.11.28提高组模拟】T1染色(color)
[2020.11.28提高组模拟]T1染色(color) 题目 题目描述 给定 \(n\),你现在需要给整数 \(1\) 到 \(n\) 进行染色,使得对于所有的 \(1\leq i<j\leq ...
- vue上传视屏或者图片到七牛云
首先下载七牛云的JavaScript-SDK npm install qiniu-js 下载完成JavaScript-SDK以后就可以上传图片信息了 <template> <div& ...
- eclispe中打点不会提示的解决方法,以及自动补全
Eclipse中打点无提示的解决办法 建了个JAVA工程,然后发现输入代码后,在输入.后面不会弹出来我所要的函数. alt+/ 提示No Default Proposals 自己找了半天, ...