》》》内容基本框架: 1.爬虫目的 2.爬取过程 3.代码实现 4.爬取结果 》》》实验环境: python3.6版本,pycharm,电脑可上网。
【一 爬虫目的】对喜马拉雅上一个专辑的音频进行爬取并保存到本地
要爬取的喜马拉雅音频数据如下所示:
每页30个音频,共x页。
【二 爬取过程】
》》》F12打开谷歌功能,点击Network选项:
F5刷新后,随便点击一个音频进行播放(这里特别注意):
找到我们要爬取的页面数据的url地址:/revision/play/album?albumId=269179&pageNum=1&sort=-1&pageSize=30
【三 代码实现】
#!/usr/bin/env python# coding:utf-8# Time:-8-14# Author:ForYouimport requestsimport jsonimport re# import lxml# 是“吴晓波频道”的前3页数据源代码:"""/revision/play/album?albumId=269179&pageNum=1&sort=-1&pageSize=30/revision/play/album?albumId=269179&pageNum=2&sort=-1&pageSize=30/revision/play/album?albumId=269179&pageNum=3&sort=-1&pageSize=30"""class Xima(object):# def __init__(self, book_name):def __init__(self, book_name):# 模拟浏览器self.headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36"}# self.book_name = "复旦女神教师陈果的幸福哲学课"self.book_name = book_name# 这里肯定是存在问题的!# self.start_url = "/revision/play/album?albumId=269179&pageNum={}&sort=-1&pageSize=30"self.start_url = "/revision/play/album?albumId=269179&pageNum={}&sort=-1&pageSize=30"# self.start_url = "/revision/play/album?albumId=6419495&pageNum=1&sort=-1&pageSize=30"self.book_url = []for i in range(2): # 先爬取3页;url =self.start_url.format(i + 1)self.book_url.append(url)print(self.book_url)def get_book_msg(self):"""从当前url获取到返回的数据,并且取到音频中的url和当前应音频的名字:return:"""all_list = []for url in self.book_url:r = requests.get(url, headers=self.headers)# r.content.decode()是请求当前url得到的俄数据,是一个json类型字符串# python_dict是通过json.loads()把json类型字符串变为python的字典pythpon_dict = json.loads(r.content.decode())book_list = pythpon_dict["data"]["tracksAudioPlay"]# m = 1for i in book_list:# print(("{}"+". "+i["trackName"]+" "+i["src"]).format(m))# m += 1list = {}list["index"] = i["index"]list["name"] = i["trackName"]list["src"] = i["src"]all_list.append(list)return all_listdef save(self, all_list):"""保存音频文件"""for i in all_list:# i实际上就是我们每一个音频的名字和url# with open(r"D:\喜马拉雅音频下载\{}.m4a".format(self.book_name + i["index"]+". "+i["name"],'ab') ) as f:# with open(r"D:\喜马拉雅全集音频下载\{}.m4a".format(self.book_name + "{}".format(i["index"])+'. '+i["name"]), 'ab') as f:# 特别注意:******re.sub('"|\|:|', '', i['name']) # 这个在爬虫时很重要!******with open(r"D:\xima\{}.m4a".format(self.book_name + ' '+ str(i["index"])+i["name"]),'ab') as f:r = requests.get(i["src"], headers=self.headers)# 通过请求音频的url得到音频的二进制数据,然后把二进制数据保存到本地print("正在保存第{}条信息".format(i["index"])) # 这句有问题!f.write(r.content)def run(self):all_list = self.get_book_msg()self.save(all_list)if __name__== '__main__':xima = Xima('吴晓波频道')# xima = Xima(id, name) # ?? xima.get_book_msg()xima.run()
View Code
【四 爬取结果】
音频数据已经保存到本地:
The end!
************************************************************************************************** Good lucky to you **************************************************************************************************