【python爬虫】对喜马拉雅上一个专辑的音频进行爬取并保存到本地

》》》内容基本框架:
1.爬虫目的
2.爬取过程
3.代码实现
4.爬取结果 
》》》实验环境:
python3.6版本,pycharm,电脑可上网。

【一 爬虫目的】对喜马拉雅上一个专辑的音频进行爬取并保存到本地

要爬取的喜马拉雅音频数据如下所示:

【python爬虫】对喜马拉雅上一个专辑的音频进行爬取并保存到本地_第1张图片

 

【python爬虫】对喜马拉雅上一个专辑的音频进行爬取并保存到本地_第2张图片

【python爬虫】对喜马拉雅上一个专辑的音频进行爬取并保存到本地_第3张图片

【python爬虫】对喜马拉雅上一个专辑的音频进行爬取并保存到本地_第4张图片

每页30个音频,共x页。

【二 爬取过程】

》》》F12打开谷歌功能,点击Network选项:

 【python爬虫】对喜马拉雅上一个专辑的音频进行爬取并保存到本地_第5张图片

F5刷新后,随便点击一个音频进行播放(这里特别注意)

找到我们要爬取的页面数据的url地址:https://www.ximalaya.com/revision/play/album?albumId=269179&pageNum=1&sort=-1&pageSize=30

 【python爬虫】对喜马拉雅上一个专辑的音频进行爬取并保存到本地_第6张图片

【三 代码实现】

#!/usr/bin/env python
# coding:utf-8
# Time:2018-8-14
# Author:ForYou

import requests
import json
import re
# import lxml

# 是“吴晓波频道”的前3页数据源代码:
"""
https://www.ximalaya.com/revision/play/album?albumId=269179&pageNum=1&sort=-1&pageSize=30
https://www.ximalaya.com/revision/play/album?albumId=269179&pageNum=2&sort=-1&pageSize=30
https://www.ximalaya.com/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 = "https://www.ximalaya.com/revision/play/album?albumId=269179&pageNum={}&sort=-1&pageSize=30"
        self.start_url = "https://www.ximalaya.com/revision/play/album?albumId=269179&pageNum={}&sort=-1&pageSize=30"
        # self.start_url = "https://www.ximalaya.com/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 = 1

            for i in book_list:
                # print(("{}"+". "+i["trackName"]+" "+i["src"]).format(m))
                # m += 1
                list = {}
                list["index"] = i["index"]
                list["name"] = i["trackName"]
                list["src"] = i["src"]
                all_list.append(list)
        return all_list
    def 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

【四 爬取结果】 

音频数据已经保存到本地:

 【python爬虫】对喜马拉雅上一个专辑的音频进行爬取并保存到本地_第7张图片

The end!

**************************************************************************************************
                                                        Good lucky to you
**************************************************************************************************

转载于:https://www.cnblogs.com/520ZXL/p/9508198.html

你可能感兴趣的:(爬虫,python,json)