我可是连喜马拉雅付费音频都能爬取的菜鸟!是不是很强?牛逼吧?
emmm...不是她 是它 前言 说正经的,前几天给大家看了如何爬取文本以及爬取图片,这儿就来讲讲如何爬取音频(以这个喜马拉雅为例) 当我重新跑了一下程序之后,发现...好家伙居然换标签了;这不一下子就来了兴致,与人斗,其乐无穷啊~ 分析 很多时候不是你不会爬虫,而是你没有一个完整的爬取的思路(当然非常熟练之后,基本上可以根据经验来写啦) 首页 全部分类 我们想爬取的话,可以从这里入手,就是获取这些分类之后,遍历这些分类中的节目,也就是下图中的部分的节目 而每个节目中,又有如下图这样的一个个播放列表 所以到这里我们基本的思路就是: 1、访问全部分类界面后,获取每个分类的链接 2、进入每个分类,获取每个节目的链接 3、获取每个节目下的播放列表对应的音频原地址 4、访问并保存音频 当然前提我们爬取的是免费的音频,如果想要爬取收费的,说白了你先得开个会员充点钱,再爬取;就我所知的并没有能够让你直接爬取付费的音频或视频,如果可以,也很麻烦,而且可以说,你的这种行为相当有问题 开始 首先我初始化基本所需的这些url等,方便在下面的程序中使用 def __init__(self): self.category_Url = 'https://www.ximalaya.com/category/' self.base_url = 'https://www.ximalaya.com' self.base_api = 'https://www.ximalaya.com/revision/play/tracks?trackIds=' self.header = { 'User-Agent': 'your-user-agent' } self.s = requests.session() 然后我们从全部分类开始,获取每一个分类的url,拼接之后,再去访问(这里添加了break是由于数量太多,举例而为) def geturl(self): r = self.s.get(self.category_Url,headers=self.header) result = re.findall(r'',r.text,re.S) url_list = [] for i in result: # 以一个分类为例 - - 有声书中的文学类,若没有break 则可获取全部分类 second_url = self.base_url + i[0] url_list.append(second_url) # 获取该分类中全部的页数 print(second_url,i[1]) self.get_more_page(second_url) break 接着我们进入到一个分类中,可以看到每个分类大概有34页,所以我们需要遍历这些页;在源代码中我们拿到了最大页数,以此进行循环;而后进入每一页去获取每一页的FM节目的链接 fm_url(可以将获取的节目信息,保存到数据库中,这里我暂未添加,有兴趣的朋友可以实现) def get_more_page(self,url): r = self.s.get(url,headers=self.header) pagenum = re.findall(r'每一个FM节目中有很多的音频,有的可能还有很多页,所以这时也要判断,是否存在多页;若有最大页数则说明需要循环这些页来获取内容,若没有则正常进行下一步 |