如何用Python爬取喜马拉雅全网音频文件

什么是喜马拉雅

喜马拉雅FM是国内分享平台,3月手机客户端上线,两年多时间手机用户规模已突破2亿 [1] ,成为国内发展最快、规模最大的在线移动音频分享平台。

今天小编分享爬取喜马拉雅的单本全集的音频文件和全网站的音频

环境配置:

Windows + Python 3.6

爬取单本音频

1 import json
2
3 import re
4
5 import requests

爬取全站模块使用

1 import re
2
3 import requests
4
5 from lxml import etree
6
7 from onexima import Xima

其实你点开网站里面的任意一个音频都会发现他们都有一个ID

我们需要做的就是把每一个音频的ID和整个音频的ID获取、每本书籍的名称,然后保存下载

其实思路还是很简单的。

下面是爬取一本书籍的Python音频代码

 1 import json
 2 import re
 3
 4 import requests
 5 #Python学习交流群:125240963,群内每天分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎各位小伙伴入群学习交流
 6
 7 class Xima(object):
 8     def __init__(self, book_id, book_name):
 9         # 保存文字用的
10         self.book_name = book_name
11         self.headers = {
12             "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
13         }
14         # 当前书的第一页的url, 把书的id留着就是为了咱们能够更方便的获取别的书的音频信息
15         self.start_url = "https://www.ximalaya.com/revision/play/album?albumId=%s&pageNum={}&sort=-1&pageSize=30" % book_id
16         # 当前书的每一页的url
17         self.book_url = []
18         for i in range(8):  # 如果想获得准备的多少页, 可以从第一页里面把多少页的信息找到, 然后放到range()里面
19             url = self.start_url.format(i + 1)
20             self.book_url.append(url)
21             # print(self.book_url)
22
23
24     def get_book_msg(self):
25         """获取到所有书的音频信息和书名"""
26         all_list = []  # 存储当前书的所有音频和书名信息
27         for url in self.book_url:
28             # 遍历每一页的url, 从中提取每一页的音频数据
29             r = requests.get(url, headers=self.headers)
30             python_dict = json.loads(r.content.decode())  # 得到第一页的所有书的字典数据
31             book_list = python_dict[‘data‘][‘tracksAudioPlay‘]  # 第一页的所有书信息, 所有音频对应到的当前层次字典
32             for book in book_list:
33                 # 遍历取出每一个音频的播放地址信息和名字放进字典
34                 list = {}
35                 list[‘src‘] = book[‘src‘]
36                 list[‘name‘] = book[‘trackName‘]
37                 # 所有单个音频都放进列表当中
38                 all_list.append(list)
39         print(all_list)
40         return all_list
41
42     def save(self, all_list):
43         """保存每一本书到本地"""
44         # 遍历每一个音频, 然后保存
45         for i in all_list:
46             print(i)
47             # {‘src‘: ‘http://audio.xmcdn.com/group44/M01/67/B4/wKgKkVss32fCcK5xAIMTfNZL0Fo411.m4a‘, ‘name‘: ‘到日本投资民宿还能挣钱吗?‘}
48             i[‘name‘] = re.sub(‘"‘, ‘‘, i[‘name‘])  # 有些名字里面会带有", 这个时候, 因为转义的问题, 程序会报错, 所有我们得把"替换成空白,
49             with open(r‘xima/{}.m4a‘.format(self.book_name + i[‘name‘]), ‘ab‘) as f:
50                 r = requests.get(i[‘src‘], headers=self.headers)
51                 ret = r.content
52                 # 获取到音频的二进制文件保存起来才是音频文件
53                 f.write(ret)
54
55     def run(self):
56         """运行方法"""
57         all_list = self.get_book_msg()
58         self.save(all_list)
59
60
61 if __name__ == ‘__main__‘:
62     # 传进去当前书的json id, 才能得到正确的json数据
63     xima = Xima(‘3385980‘, ‘静说日本‘)
64     xima.run()

爬取全站音频代码

 1 import re
 2 import requests
 3 from lxml import etree
 4 from onexima import Xima
 5
 6 #Python学习交流群:125240963,群内每天分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎各位小伙伴入群学习交流
 7 def get_id():
 8     """获取排行榜每一本书的信息"""
 9     main_url = "https://www.ximalaya.com/shangye/top/"
10     headers = {
11         "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
12     }
13     r = requests.get(main_url, headers=headers)
14     # 获取到当前页面的xml数据
15     html = etree.HTML(r.content.decode())
16     # 得到每一本书的位置的信息
17     div_list = html.xpath("//div[contains(@class,‘e-2997888007 rrc-album-item‘)]")
18     all_lsit = []  # 待会把每一本书的音频以字典形式放进列表当中
19     for div in div_list:
20         author = {}  # 创建一个列表, 我们要获取书的id和书的名字, 并且一一对应
21         r = div.xpath("./a/@href")[0]  # 获取到当前书的id所在信息, 数据为: /renwen/4859823/
22         print(r)
23         # 所以得通过正则把正确的id取出来, id是为了传入正确的id, 得到正确的json数据
24         author[‘id‘] = re.search(r‘\/.*?\/(.*)\/‘, r).group(1)
25         author[‘book_name‘] = div.xpath("./a/div[3]/div[1]/span/text()")[0]
26         # 向列表中传入每一个音频的信息
27         all_lsit.append(author)
28     print(all_lsit)
29     return all_lsit
30
31
32 # 调用函数得到所有每一本书的信息, 是一个列表类型
33 all_lsit = get_id()
34 for i in all_lsit:
35     # 遍历列表, 把每本书对应的id和对应的书名传到类里面去
36     x = Xima(i[‘id‘], i[‘book_name‘])
37     x.run()

原文地址:https://www.cnblogs.com/Python6359/p/9270418.html

时间: 2024-08-02 04:45:23

如何用Python爬取喜马拉雅全网音频文件的相关文章

Python中使用requests和parsel爬取喜马拉雅电台音频

场景 喜马拉雅电台: https://www.ximalaya.com/ 找到一步小说音频,这里以下面为例 https://www.ximalaya.com/youshengshu/16411402/ 博客:https://blog.csdn.net/badao_liumang_qizhi关注公众号霸道的程序猿获取编程相关电子书.教程推送与免费下载. 实现 找到下载地址 使用谷歌浏览器打开上面网址,按F12打开调试,点击播放按钮后,然后找到Network下的Media下的Headers下的Req

如何用 Python 爬取需要登录的网站

[原文地址:]http://python.jobbole.com/83588/ import requests from lxml import html # 创建 session 对象.这个对象会保存所有的登录会话请求. session_requests = requests.session() # 提取在登录时所使用的 csrf 标记 login_url = "https://bitbucket.org/account/signin/?next=/" result = sessio

如何用 Python 爬取需要登录的网站?

最近我必须执行一项从一个需要登录的网站上爬取一些网页的操作.它没有我想象中那么简单,因此我决定为它写一个辅助教程. 在本教程中,我们将从我们的bitbucket账户中爬取一个项目列表. 教程中的代码可以从我的 Github 中找到. 我们将会按照以下步骤进行: 提取登录需要的详细信息 执行站点登录 爬取所需要的数据 在本教程中,我使用了以下包(可以在 requirements.txt 中找到): Python 1 2 requests lxml 步骤一:研究该网站 打开登录页面 进入以下页面  

如何用python爬取两个span之间的内容

Python用做数据处理还是相当不错的,如果你想要做爬虫,Python是很好的选择,它有很多已经写好的类包,只要调用,即可完成很多复杂的功能,此文中所有的功能都是基于BeautifulSoup这个包. 1 Pyhton获取网页的内容(也就是源代码) page = urllib2.urlopen(url) contents = page.read() #获得了整个网页的内容也就是源代码 print(contents) url代表网址,contents代表网址所对应的源代码,urllib2是需要用到

分手后,小伙怒用Python爬取上万空姐照片,赢取校花选举大赛!

首先展示下Python爬取到的成果:   我做什么都要争第一,这次的校花投票选举大赛也不例外,虽然我是个男的......但是我看到了前女友竟然已经有三百多票排到第三名了,我怎么能眼睁睁的看着她优秀呢?我必须要让她排到前三除外,·不行,必须是前十开外!我想到一个办法就是用Python开发一个百度爬虫,爬取百度所有美女的照片,然后申请多个账号进行参赛.   其实比起Python爬取图片外,我对微信上的投票小程序也有所研究,已经有了Python实现微信上刷票脚本的思路,这个我下次再分享大家,这次先学习

使用python爬取csdn博客访问量

最近学习了python和爬虫,想写一个程序练练手,所以我就想到了大家都比较关心的自己的博客访问量,使用python来获取自己博客的访问量,这也是后边我将要进行的项目的一部分,后边我会对博客的访问量进行分析,以折线图和饼图等可视化的方式展示自己博客被访问的情况,使自己能更加清楚自己的哪些博客更受关注,博客专家请勿喷,因为我不是专家,我听他们说专家本身就有这个功能. 一.网址分析 进入自己的博客页面,网址为:http://blog.csdn.net/xingjiarong 网址还是非常清晰的就是cs

python爬取某个网站的图片并保存到本地

python爬取某个网站的图片并保存到本地 #coding:utf-8 import urllib import re import sys reload(sys) sys.setdefaultencoding('gb2312') #获取整个页面的数据 def getHtml (url): page = urllib.urlopen(url) html = page.read() return html #保存图片到本地 def getImg(html): reg = r'src="(.+?\.

python爬取某个网页的图片-如百度贴吧

python爬取某个网页的图片-如百度贴吧 作者:vpoet 日期:大约在冬季 注:随意copy,不用告诉我 #coding:utf-8 import urllib import urllib2 import re if __name__ =="__main__": rex=r'src="(http://imgsrc.baidu.com/forum/w%3D580.*?\.jpg)"'; Response=urllib2.urlopen("http://t

使用python爬取MedSci上的影响因子排名靠前的文献

使用python爬取medsci上的期刊信息,通过设定条件,然后获取相应的期刊的的影响因子排名,期刊名称,英文全称和影响因子.主要过程如下: 首先,通过分析网站http://www.medsci.cn/sci的交互过程.可以使用谷歌或火狐浏览器的“审查元素-->Network”,然后就可以看到操作页面就可以看到网站的交互信息.当在网页上点击“我要查询”时,网页会发送一个POST消息给服务器,然后,服务器返回查询结果 然后,将查询到的结果使用正则表达式提取出需要的数据. 最后将提取出的数据输出到文