这里先说下思路:

1、首先要获取当前书的音频信息

        '''获取当前书的音频信息'''
all_list = []
for url in self.book_url:
r = requests.get(url, headers=self.headers)
ret = r.content.decode()
# ret通过requests请求得到的网页源代码,是一个json数据类型
pyhton_dict = json.loads(ret) # 通过json.loads(ret)把ret这个json类型的字符串变成python的dict
# print(pyhton_dict)
pythonData = pyhton_dict['data']['tracksAudioPlay']
# print(pythonData)
for book in pythonData:
# 取出每个音频的播放地址和名字
list = {}
list['src'] = book['src']
list['name'] = book['trackName']
print(list)
all_list.append(list)
return all_list # 所有音频的信息,只是一个list

2、然后遍历保存

  for i in all_list:
# 遍历每个音频,保存
print(i)
i['name'] = re.sub('"', '', i['name']) # 如果有文件名称是"结尾,需要改成空
with open('D:\\xima\\{}.m4a'.format(self.name + i['name']), 'ab') as f: # wb会覆盖之前数据,ab不覆盖保存
r = requests.get(i['src'], headers=self.headers)
ret = r.content
f.write(ret)
print("下载完毕")

3、最后直接上代码啦!

import requests
from lxml import etree
import re
import json class Xima(object): def __init__(self, name):
self.name = name
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36"
}
self.start_url = "https://www.ximalaya.com/revision/play/album?albumId=260744&pageNum={}&sort=-1&pageSize=30" # {} 占位
self.book_url = []
for i in range(30):
url = self.start_url.format(i+1) # format格式插入
self.book_url.append(url)
print(self.book_url)
print(len(self.book_url)) def get_book_msg(self):
'''获取当前书的音频信息'''
all_list = []
for url in self.book_url:
r = requests.get(url, headers=self.headers)
ret = r.content.decode()
# ret通过requests请求得到的网页源代码,是一个json数据类型
pyhton_dict = json.loads(ret) # 通过json.loads(ret)把ret这个json类型的字符串变成python的dict
# print(pyhton_dict)
pythonData = pyhton_dict['data']['tracksAudioPlay']
# print(pythonData)
for book in pythonData:
# 取出每个音频的播放地址和名字
list = {}
list['src'] = book['src']
list['name'] = book['trackName']
print(list)
all_list.append(list)
return all_list # 所有音频的信息,只是一个list def save(self, all_list):
print("开始下载")
for i in all_list:
# 遍历每个音频,保存
print(i)
i['name'] = re.sub('"', '', i['name']) # 如果有文件名称是"结尾,需要改成空
with open('D:\\xima\\{}.m4a'.format(self.name + i['name']), 'ab') as f: # wb会覆盖之前数据,ab不覆盖保存
r = requests.get(i['src'], headers=self.headers)
ret = r.content
f.write(ret)
print("下载完毕") def run(self):
all_list = self.get_book_msg()
self.save(all_list) if __name__ == "__main__":
xima = Xima('晚安妈妈睡前故事')
xima.run()

python爬虫-喜马拉雅_晚安妈妈睡前故事的更多相关文章

  1. PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)

    说明 文章首发于HURUWO的博客小站,本平台做同步备份发布. 如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览. 原文链接 PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二 ...

  2. python爬虫(一)_爬虫原理和数据抓取

    本篇将开始介绍Python原理,更多内容请参考:Python学习指南 为什么要做爬虫 著名的革命家.思想家.政治家.战略家.社会改革的主要领导人物马云曾经在2015年提到由IT转到DT,何谓DT,DT ...

  3. Python爬虫(九)_非结构化数据与结构化数据

    爬虫的一个重要步骤就是页面解析与数据提取.更多内容请参考:Python学习指南 页面解析与数据提取 实际上爬虫一共就四个主要步骤: 定(要知道你准备在哪个范围或者网站去搜索) 爬(将所有的网站的内容全 ...

  4. Python爬虫(十一)_案例:使用正则表达式的爬虫

    本章将结合先前所学的爬虫和正则表达式知识,做一个简单的爬虫案例,更多内容请参考:Python学习指南 现在拥有了正则表达式这把神兵利器,我们就可以进行对爬取到的全部网页源代码进行筛选了. 下面我们一起 ...

  5. Python爬虫(十三)_案例:使用XPath的爬虫

    本篇是使用XPath的案例,更多内容请参考:Python学习指南 案例:使用XPath的爬虫 现在我们用XPath来做一个简单的爬虫,我们尝试爬取某个贴吧里的所有帖子且将该帖子里每个楼层发布的图片下载 ...

  6. 【转】Python爬虫(5)_性能相关

    爬虫性能相关 一 背景知识 爬虫的本质就是一个socket客户端与服务端的通信过程,如果我们有多个url待爬取,采用串行的方式执行,只能等待爬取一个结束后才能继续下一个,效率会非常低. 需要强调的是: ...

  7. Python爬虫(十)_正则表达式

    本篇将介绍python正则表达式,更多内容请参考:[python正则表达式] 什么是正则表达式 正则表达式,又称规则表达式,通常被用来检索.替换那些符合某个模式(规则)的文本. 正则表达式是对字符串操 ...

  8. 【转】Python爬虫(1)_基本原理

    一 爬虫是什么 #如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,沿着网络抓取自己的猎物/数据 #爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程 ...

  9. Python爬虫--喜马拉雅三国音频爬取

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:Botreechan  1.进入地址我们可以发现,页面有着非常整齐的目 ...

随机推荐

  1. [RN] React Native 使用 react-navigation 报错 "Unable to resolve module `react-native-gesture-handler`

    在React Native 使用 react-navigation 过程中,报错 "Unable to resolve module `react-native-gesture-handle ...

  2. [USACO06FEB] Stall Reservations 贪心

    [USACO06FEB] Stall Reservations 贪心 \(n\)头牛,每头牛占用时间区间\([l_i,r_i]\),一个牛棚每个时间点只能被一头牛占用,问最少新建多少个牛棚,并且每头牛 ...

  3. Pollard-Rho算法求大数质因子

    /* * 大整数分解到现在都是世界级的难题,但却是一个重要的研究方向,大整数在公共密钥的研究上有着重要的作用 * Pollard Rho算法的原理就是通过某种方法得到两个整数a和b.而待分解的大整数为 ...

  4. 微信小程序与云开发

    微信小程序基础概念 小程序云开发的三大基础能力:云数据库.云函数.云存储 Java.NodeJS.JavaScript.HTML5.CSS3.VueJs.ReactJs.前端工程化.前端架构 小程序开 ...

  5. CDH 6.0.1 版本 默认配置下 HUE | happybase 无法访问 Hbase 的问题

    第一个问题 HUE 无法直接连接到 HBase 在默认配置下 CDH 6.0.1 版本下的 HBase2.0 使用了默认配置 hbase.regionserver.thrift.compact = T ...

  6. [学习笔记] kd-tree

    本文参考这位dalao的题解 前置技能:二叉查找树 其实kd-tree很简单的啦 和BST都差不多的啦 就是在划分的时候把每一维都比较一下就行啦 (\(dalao\)的kd-tree教程) 然而本蒟蒻 ...

  7. mysql的动态表名

    create EVENT createMtpulseTable ON SCHEDULE every 1 month STARTS CURRENT_TIMESTAMP DO CALL pro_creat ...

  8. Hadoop(三)—— YARN

    YARN产生的背景 Hadoop相关概念 Hadoop 1.0 由HDFS.MapReduce组成. Hadoop 2.0 克服1.0中HDFS和MapReduce存在的各种问题而提出的. YARN是 ...

  9. Sword C语言原子操作

    /* gcc内置原子操作 */ #include <stdio.h> /* 知识补充: gcc 4.1.2版本之后,对X86或X86_64支持内置原子操作.即不需要引入第三方库(如pthr ...

  10. SpringCloud基础知识

    什么是SpringCloud Spring Cloud是一系列框架的有序集合. 为什么用SpringCloud Spring Cloud涵盖面广,能够与Spring Framework.Spring ...