这里先说下思路:

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. Mysql 随机查询10条数据效率最快的查询方法

    1)使用join 和 rand() 耗时 0.009 SELECT * FROM `t_topic` AS t1 JOIN ( SELECT ROUND( RAND() * ( (SELECT MAX ...

  2. 复旦高等代数 I(16级)每周一题

    每周一题的说明 一.本学期高代I的每周一题面向16级的同学,将定期更新(一般每周的周末公布下一周的题目); 二.欢迎16级的同学通过微信或书面方式提供解答图片或纸质文件给我,优秀的解答可以分享给大家: ...

  3. [bzoj 4833]最小公倍佩尔数

    传送门 Description   Let \((1+\sqrt2)^n=e(n)+f(n)\cdot\sqrt2\) , both \(e(n)\) and \(f(n)\) are integer ...

  4. svg入门详解

    一.svg是什么? SVG 意为可缩放矢量图形(Scalable Vector Graphics). SVG 是使用 XML 来描述二维图形和绘图程序的语言. SVG 图像在放大或改变尺寸的情况下其图 ...

  5. Python3之logging模块浅析

    Python3之logging模块浅析   目录 Python3之logging模块浅析 简单用法 日志与控制台同时输出 一个同时输出到屏幕.文件的完成例子 日志文件截取 日志重复打印问题解决 问题分 ...

  6. springMvc将对象json返回时自动忽略掉对象中的特定属性的注解方式

    1.注解使用在 类名,接口头上 @JsonIgnoreProperties(value={"comid"}) //希望动态过滤掉的属性 例 @JsonIgnorePropertie ...

  7. 爬虫中BeautifulSoup4解析器

    CSS 选择器:BeautifulSoup4 和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据. lxml 只会 ...

  8. tqdm学习-一个快速,可扩展的Python和CLI进度条

    参考:https://pypi.org/project/tqdm/ 1.安装: (base) userdeMacBook-Pro:~ user$ conda activate deeplearning ...

  9. Linux共享文件夹映射到Windows磁盘

    摘自:https://www.jianshu.com/p/4a06121450e5 1.1方案背景 本方案就是在解决磁盘不足的问题而产生的,利用映射盘的原理将Linux共享文件夹映射到Windows磁 ...

  10. win10 mount error 112 : host is down解决方案

    摘自:https://www.baidu.com/link?url=xZrOVRqR9gqGRq0esfVaivByR9E5-ixyAuKsQ_8Hiedl1sY6J7ezBlgSW3oe_X-koo ...