最全终于,还是用Python向喜马拉雅动手了_喜马拉雅网页设计分析(1),2024年最新50道面试题

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

在这里插入图片描述

一、需求介绍

我们知道Python十分适合进行爬虫的操作的,现在,我们希望可以借助Python爬取喜马拉雅这个说书平台的一些信息。

首先,我们希望可以获取得到一个频道的信息,然后,获取一个频道里面的具体的说书的内容,也就是具体的音频的内容了啦。

整体的内容是:
频道->音频(一个频道会有多个音频的)

我们需要提取的内容是一个频道的icon、poster、标题、频道下面的音频链接以及音频的封面和标题。

二、网页分析

喜马拉雅平台的url是:
https://www.ximalaya.com/

在这里插入图片描述

我们点击那个频道:
在这里插入图片描述

进入以后,我们首先随便点击一个,比如:儿童频道,然后,点击某一个具体的频道下面的哪一行灰色的字,就可以进入到具体的某一个频道了:
在这里插入图片描述

比如,我们进入蜜桃姐姐的频道:
在这里插入图片描述

现在我们想要获取得到蜜桃姐姐这个频道下面的一些信息以及具体的音频信息。(其他的频道其实是类似的,因为整个网站的网页的设计其实是相通的,只不过是具体的内容不同而已了啦)。

三、具体实现

首先打开网页检查工具,方便与我们进行网页的分析:
在这里插入图片描述

1、获取得到频道的标题、icon、poster

这三个内容获取起来比较容易一些,而且比较好操作,因此我们首先解决这三个数据的获取:
首先导入模块,


import requests
import re
import json
# 导入相关的模块


然后,我们需要确定url,

这里说一句,频道主页的url如下:
https://www.ximalaya.com/zhubo/18522984/
但是实际上,为了可以获取得到所有的音频,我们需要在这个url后面加一个album
https://www.ximalaya.com/zhubo/18522984/album/
(整个网站都是这样的哦,这个你也是可以自己进行探索,其实也就是如果他没有展示完整的话,你点一下全部就会进入到所有音频的页面,当然,这个频道比较少,一页就展示完毕了,但是为了普适性,我们还是需要加上url的哦)

我们定义一个函数来实现功能,这里传递的参数的url是主页的url,但是我们会在内部自动加一个album

def pares\_xi\_ma\_la\_ya(initial_url):
    """

 这个函数是实现了解析喜马拉雅这个听书的网站的channels,
 使用了多次访问的方式:

 1、访问频道的主页;
 2、访问某一个专栏;
 3、访问专栏下面的一个具体的单独的连载内容之一的链接得到具体的真实音频的地址。

 :param initial\_url: 初始的 url,也就是待解析的 url ,这个其实就是频道的主页了啦

 :return: 有 6 个变量需要返回,方便于后续写到数据库里面的操作:
 video\_img,
 video\_link,
 video\_title,
 icon,
 poster,
 title

 """

    url = initial_url + 'album/'
    # 用户只会输入一个频道的信息,我们获取album需要自己加上一个album
    # 其实是相当于我们获取得到了所有的音频信息,(全部)

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 Edg/92.0.902.84'
    }
    # 设置请求头

    link = url
    # 这个是频道的url,这个是主频道的url也就是那个link

    res = requests.get(url=url, headers=headers).content.decode()
    # 获取得到频道主页返回过来的内容
    # print(res)


通过这段代码可以向浏览器发送请求,得到请求以后,我们进行网页界面的分析
比如,我们通过下面的那个标签,课看出来我们的poster的具体链接是什么:
在这里插入图片描述
类似的方法,我们还可以找到标题以及icon的位置,当然,我们使用程序进行操作的话是需要使用正则表达式进行匹配的:


    title = re.findall(r"<title>主播:(.\*?)</title>", res)[0].split("\_")[0]
    print(title)
    # 读取得到频道的标题

    icon = "https:" + re.findall(r'<img class="img iH\_" src="(.\*?)" alt=".\*?">', res)[0]
    print(icon)
    # 读取得到频道的icon

    poster = "https:" + re.findall(r'<div class="anchor-home-header-bg-box iH\_" style="background-image:url\((.\*?)\)"><div class="bottom-mask iH\_"></div></div>', res)[0]
    print(poster)
    # 读取得到频道的poster


上述代码实现了以上所说的三个内容的解析。

2、获取得到具体音频的信息

这个网站是动态的网站,所以为了获取得到信息,我们必须进行多次的访问,首先,我们需要得到音频的基础信息,也就是标题、封面、音频存放的地址,然后,在通过音频存放的地址获取得到具体的真实的音频的存放信息以及音频本身的链接:

刚开始的那个data是获取得到每一个音频的基础信息的列表,然后再分割的时候由于分割的模式有一点点的缺陷,所以使用了一个循环将数据调整了一下,使得方便与后面的操作。

在得到基础的信息以后,我们又一次利用获取得到的基础信息构建新的url进行访问浏览器,得到了真实的音频的存放的地址信息。

然后,利用这个音频的存放的地址信息获取得到真实的音频链接。

具体的操作入下所示:

这里还是需要使用正则表达式进行匹配了啦。

具体代码如下所示:


    data = re.findall(r'"albumInfo":\{"albumList":\[(.\*?)\],"totalCount":(.\*?),', res)[0][0].split(",{")
    # 找的具体的video的数据,然后把字符串分割开来了啦

    for m in range(len(data)):
        # 分割开来的字符串有一点问题,因此需要进行一定的设置了啦
        # 分割开来的时候主要是把前面的括号给去掉了,所以这里需要把前面的那个括号给加回来哦
        if m == 0:
            # 第一个没有发生变化,所以说,这里是不需要进行变化的
            continue
        else:
            # 其他的位置之前是给去掉了括号,这里给他加回来了
            data[m] = "{" + data[m]
    # data 是一个列表
    # print(data)

    video_title = []
    # list

    video_img = []
    # list

    video_link = []
    # list

    for j in data:

        # 遍历data这个列表

        j = json.loads(j)
        # 处理JSON数据

        video_title.append(j["title"])
        # video 的标题(title)

        video_img.append("https://" + j["coverPath"])
        # 获取得到 video 的封面

        album_url = f'https://www.ximalaya.com/revision/play/v1/show?id={j["id"]}&num=1&sort=0&size=30&ptype=0'
        # 根据 video 的 id 访问 video 播放的界面

        new_album_res = json.loads(requests.get(url=album_url, headers=headers).content.decode())
        # video 播放的界面返回的数据

        new_new_url_id = new_album_res["data"]["tracksAudioPlay"][0]["trackId"]
        # 根据 video 的播放的界面返回来的数据中的 trackId 访问具体的某一个音频的位置的存放位置,
        # 也就是说,根据播放界面返回的数据找到具体的音频存放位置的url

        new_new_url = f'https://www.ximalaya.com/revision/play/v1/audio?id={new\_new\_url\_id}&ptype=1'

        """
 这是一个存放音频的位置的url
 https://www.ximalaya.com/revision/play/v1/audio?id=359504050&ptype=1
 """

        real_video_player_url = json.loads(requests.get(url=new_new_url, headers=headers).content.decode())["data"]["src"]
        # 访问音频的具体的存放的位置可以得到音频最真实的url
        # 也就是说,通过访问音频存放的位置的url,我们可以读取得到音频的真实地址

        video_link.append(real_video_player_url)
        # 添加音频的真实的地址

    print(video_title)

    print(video_img)

    print(video_link)

    # 查看一些信息,进行打印出来了啦。


以上就获取得到了我们需要的音频地一些信息。

我们所说的具体的音频的链接是这个东西:
在这里插入图片描述
综上所述,我们就是实现了频道的信息的解析以及具体的每一个音频的信息的解析与获取了啦。

四、完整的代码的展示:

整个代码是封装在一个函数里面的,我们只需要进行调用就可以了了啊:


"""

这个是进行解析喜马拉雅的模块了啦,
实现的功能是解析某一个给定的频道,获取得到频道的标题、icon、poster,
以及,频道内部的音频的链接(真实的音频的存放的位置)、音频的标题、音频的封面。

by hyx.

"""


import requests
import re
import json
# 导入相关的模块


# this is just an example of the channel
initial_url_of_example = 'https://www.ximalaya.com/zhubo/2390668/'


def pares\_xi\_ma\_la\_ya(initial_url):
    """

 这个函数是实现了解析喜马拉雅这个听书的网站的channels,
 使用了多次访问的方式:

 1、访问频道的主页;
 2、访问某一个专栏;
 3、访问专栏下面的一个具体的单独的连载内容之一的链接得到具体的真实音频的地址。

 :param initial\_url: 初始的 url,也就是待解析的 url ,这个其实就是频道的主页了啦

 :return: 有 6 个变量需要返回,方便于后续写到数据库里面的操作:
 video\_img,


**(1)Python所有方向的学习路线(新版)**  

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。



![在这里插入图片描述](https://img-blog.csdnimg.cn/1f807758e039481fa866130abf71d796.png#pic_center)



**(2)Python学习视频**



包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

![在这里插入图片描述](https://img-blog.csdnimg.cn/d66e3ad5592f4cdcb197de0dc0438ec5.png#pic_center)



**(3)100多个练手项目**

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

![在这里插入图片描述](https://img-blog.csdnimg.cn/f5aeb4050ab547cf90b1a028d1aacb1d.png#pic_center)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 28
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值