抓取网页音频(爬取网站上面的音频数据该如何去做呢?(一))

优采云 发布时间: 2021-11-25 20:18

  抓取网页音频(爬取网站上面的音频数据该如何去做呢?(一))

  前言

  最近分享了一些爬虫知识点。所以今天我们可以通过我们目前掌握的爬虫技术和Python技术来爬取某个平台的音频数据。

  我们都知道,一般的数据都在url地址对应的网页源码中。如下所示

  

  网页源代码

  

  但是如果要抓取的数据不在当前URL地址对应的网页源代码中,那就真的比较痛苦了。在这种情况下,数据要么在后期动态添加到网页中,要么通过 ajax 加载。不管是哪一种,对于初学者来说都是异常的头痛。今天我们就用通俗易懂的方式来分析ajax数据的特点(一切都是特殊的,所以不同的场景需要特殊处理)

  实践中的 ajax 是什么?

  先解决一个问题。什么是阿贾克斯?来介绍一下百度百科的解释

  Ajax 代表“Asynchronous Javascript And XML”(异步 JavaScript 和 XML)。它是一种 Web 开发技术,可创建交互式、快速和动态的 Web 应用程序。它可以在不重新加载整个网页的情况下更新某些网页。

  这段话的一个关键点是,您可以在不加载整个网页的情况下更新某些网页。例如,以下是 12306 列火车的列表。

  

  在这张图中,我们可以看到12306的网页就是这样的风格。但是当我们点击“查询”按钮时,我们要观察这个网页的效果

  

  我们发现这个网页没有刷新,但是本地结构发生了变化。然后通过ajax加载车次列表数据。其实,刚刚我们理解“无需重新加载整个网页就可以更新部分网页的技术”这句话的含义并不难。

  案例展示

  下面通过一个案例来进一步分析总结如何抓取ajax数据

  下图是一段音频网站。在这个网站中,数据主要是音频。那么我们要如何抓取网站上面的音频数据呢?

  

  我们进一步优化了目标。下面有这样一个音频主题。今天我们就爬取这个话题的数据。

  

  点击专辑后,我们发现里面有很多音频数据。按照我们的思路,只要找到每个音频的url就可以轻松爬取。

  

  但前提是数据是否在当前URL地址之上?让我们检查一下网页的源代码。这也很简单。我们只需要在源代码中搜索mp3或m4a等音频格式即可。从下图我们可以看到这些音频格式在网页上是不可用的。然后我们猜测这些数据可能是通过ajax加载的

  

  接下来,我们将通过NetWork 来分析数据接口。我们点击了一首歌曲,发现在网络中刷新了一些数据。先看第一条数据

  

  数据确实在这个界面

  

  我们点击进一步观察,看看有没有类似mp3或m4a的音频格式。然而,令我们失望的是,它没有。那我该怎么办?

  

  在这个数据接口下还有一条数据。我们来看看里面有什么?

  

  点击这个数据,我们发现它是一个音频数据

  

  为了验证这个数据是否是我们要爬取的,我们可以检查一下。OK,没问题就是我们要爬取的数据

  

  但这只是一个音频,如果我们想爬取其他音频怎么办?我们发现不同音频的id是不同的。然后就很容易了。我们先访问第一个数据接口中的内容,获取音频的id和name。

  

  然后我们将转到第二个数据接口,到其 url 以动态获取替换音频的 id。

  

  代码演示

  import requests

import json

url = 'https://www.ximalaya.com/revision/play/v1/show?id=231012348&sort=1&size=30&ptype=1'

headers = {

    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'

}

r = requests.get(url,headers=headers)

ret = r.text

result = json.loads(ret)

content_list = result['data']['tracksAudioPlay']

for content in content_list:

    t_id = content['trackId'] # 音频的id

    name = content['trackName'] # 音频的name

    # print(t_id,type(t_id))

    url = 'https://www.ximalaya.com/revision/play/v1/audio?id=%d&ptype=1'%t_id

    mus_response = requests.get(url,headers=headers)

    mus_html = mus_response.text

    mus_result = json.loads(mus_html)

    # print(mus_html,type(mus_result))

    mus_src = mus_result['data']['src']

    # print(mus_src)

    with open('mp3/%s.m4a'% name,'wb') as f:

        mus = requests.get(mus_src)

        f.write(mus.content)

复制代码

  运行结果

  

  这是部分核心代码的列表。大家可以在这个代码的基础上进行升级和扩展。案子不难,大家可以试试。不过我们还是要心存感激,不要恶意爬取网站上面的数据。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线