【Python实战】Python采集情感音频

成年人的世界真不容易啊
总是悲伤大于欢喜
爱情因为懵懂而快乐
却走进了复杂和困惑的婚姻

前言

我最近喜欢去听情感类的节目,比如说,婚姻类,我可能老了吧。我就想着怎么把音乐下载下来了,保存到手机上,方便我们业余时间去听。

环境使用

  • python 3.9
  • pycharm

模块使用

  • requests

模块介绍

  • requests

        requests是一个很实用的Python HTTP客户端库,爬虫和测试服务器响应数据时经常会用到,requests是Python语言的第三方的库,专门用于发送HTTP请求,使用起来比urllib简洁很多。

  • parsel

        parsel是一个python的第三方库,相当于css选择器+xpath+re。

parsel由scrapy团队开发,是将scrapy中的parsel独立抽取出来的,可以轻松解析html,xml内容,获取需要的数据。

相比于BeautifulSoup,xpath,parsel效率更高,使用更简单。

  • re

        re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。

  • os

        os 就是 “operating system” 的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用 os 模块,一方面可以方便地与操作系统进行交互,另一方面也可以极大增强代码的可移植性。

  • csv

        它是一种文件格式,一般也被叫做逗号分隔值文件,可以使用 Excel 软件或者文本文档打开 。其中数据字段用半角逗号间隔(也可以使用其它字符),使用 Excel 打开时,逗号会被转换为分隔符。csv 文件是以纯文本形式存储了表格数据,并且在兼容各个操作系统。

模块安装问题:

  • 如果安装python第三方模块:

win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车

在pycharm中点击Terminal(终端) 输入安装命令

  • 安装失败原因:

  • 失败一: pip 不是内部命令

                解决方法: 设置环境变量

  • 失败二: 出现大量报红 (read time out)

                解决方法: 因为是网络链接超时, 需要切换镜像源

   

    清华:https://pypi.tuna.tsinghua.edu.cn/simple
    阿里云:https://mirrors.aliyun.com/pypi/simple/
    中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
    华中理工大学:https://pypi.hustunique.com/
    山东理工大学:https://pypi.sdutlinux.org/
    豆瓣:https://pypi.douban.com/simple/
    例如:pip3 install -i https://pypi.doubanio.com/simple/ 模块名
  • 失败三: cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入

                解决方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可) 卸载一个就好,或者你pycharm里面python解释器没有设置好。

代码实现

发送请求

首先,我们要确定我们的目标网址,我们想要获取到每一个音频的地址。

我们发送请求,获取网页源代码。我们相信大家这里的代码都会写了。

url = 'https://www.ximalaya.com/album/37453303'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
}

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

requests 是 Python 的一个内置模块,用于发送 HTTP 请求。在这个例子中,我们使用 requests.get() 函数向 https://www.ximalaya.com/album/37453303 发送一个 GET 请求,并将请求头和响应体作为参数传递给函数。

获取数据

info_list = re.findall('"tracks":[(.*?)]', res.text)[1]
print(info_list)

re.findall() 函数用于在字符串中查找所有匹配的子字符串。在这个例子中,我们使用 re.findall() 函数查找了响应体中的 tracks 字符串,并使用切片 [1] 取出了子字符串列表。

子字符串列表中的第一个元素就是我们要找的 tracks 字符串。我们将其存储在 info_list 变量中,并使用 print() 函数输出。

我们发现,我们想要的数据,就在我们匹配的内容中。里面包含了每一个音乐的标题和其id,我们接下来把这个获取下来。

注意,这里,不是json数据,所以,我们只能正则去匹配。

trackIds = re.findall('"trackId":(\d+)', info_list)
# print(trackIds)
titles = re.findall('"title":"(.*?)"', info_list)
# print(titles)

解析数据

我们通过对比url发现,我们只需要拿到uid,就可以直接访问到音频。这里就不多解释。

audio = f'https://www.ximalaya.com/revision/play/v1/audio?id={trackId}&ptype=1'

我们只需要把trackID换掉,就可以了。请求上面的url,就可以拿到音频的地址。接下来,我们写代码。

for trackId, title in zip(trackIds, titles):
    audio = f'https://www.ximalaya.com/revision/play/v1/audio?id={trackId}&ptype=1'
    print(audio)
    audio_res = requests.get(audio, headers=headers)
    audio_url = audio_res.json()['data']['src']
    print(audio_url)

zip() 函数用于将两个列表合并成一个列表。在这个例子中,我们使用 zip() 函数将 trackIds 和 titles 两个列表合并成一个列表,并将其存储在 trackIds 变量中。

然后,我们将 trackId 和 title 转换为字符串格式,并将其存储在 audio 变量中。

接下来,我们使用 requests.get() 函数向 audio 发送一个 GET 请求,并将请求头和响应体作为参数传递给函数。 最后,我们使用 json() 方法将响应体中的 data 字段转换为 JSON 格式,并使用 ['data']['src'] 取出了 src 属性,即 audio_url 的值,并将其存储在 audio_url 变量中。

 保存数据

music_content = requests.get(audio_url, headers=headers).content

with open('music//' + f'{title}' + '.mp3', mode='wb') as filename:
    filename.write(music_content)
    print(title, '保存成功')

接下来,我们请求这个网页,保存二进制到本地。with open() 语句用于自动关闭文件,确保文件在使用完毕后被正确关闭。在这个例子中,我们使用 with open() 语句打开一个名为 music// + title + .mp3的文件,并将其保存到变量filename 中。

然后,我们使用 write() 方法将音频内容写入文件中。

全部代码

import os
import re
import requests

filename = 'music//'
if not os.path.exists(filename):
    os.mkdir(filename)

url = 'https://www.ximalaya.com/album/37453303'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36',
}
res = requests.get(url,headers=headers)
seoTrackList = re.findall('"seoTrackList":\[(.*?)\]', res.text)[0]
# print(seoTrackList)
trackIds = re.findall('"trackId":(\d+)',seoTrackList)
# print(trackIds)
titles = re.findall('"trackName":"(.*?)"',seoTrackList)
# print(titles)
for trackId,title in zip(trackIds,titles):
    # audio = 'https://www.ximalaya.com/revision/play/v1/audio?id=621413024&ptype=1'
    audio = f'https://www.ximalaya.com/revision/play/v1/audio?id={trackId}&ptype=1'
    print(audio)
    audio_res = requests.get(audio,headers=headers)
    # print(audio_res)
    audio_url = audio_res.json()['data']['src']
    print(audio_url)

    music_content = requests.get(audio_url,headers=headers).content
    with open('music//' + f'{title}' + '.mp3', mode='wb') as filename:
        filename.write(music_content)
        print(title, '保存成功')

总结

这是一个关于如何下载音乐并保存到手机的Python代码实战。我们首先确定我们的目标网址,然后使用requests.get()函数向该网址发送一个 GET 请求,并将请求头和响应体作为参数传递给函数。

在请求成功后,我们使用json()方法将响应体中的 data 字段转换为 JSON 格式,并使用['data']['src']取出了 src 属性,即 audio_url 的值,并将其存储在 audio_url 变量中。

我们请求网页,保存二进制,就可以保存了。

6adf31c8c5dd4e6a83314f4805b30bc1.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/32359.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jnpf低代码开发平台

一、写在前面 低代码开发平台,一个号称能在几分钟的时间里开发出一套公司内部都可使用的应用系统开发工具。 很多人或许都隐隐听说过低代码,因为低代码不仅远名国外,国内的腾讯、阿里、华为、网易、百度等科技巨头也纷纷入局,足以…

URL到页面: 探索网页加载的神秘过程

当我们从浏览器的地址栏输入 URL, 按下回车, 再到最后出现需要的网页界面, 这中间究竟发生了什么, 接下来就一步步进行解析. 主要是如下过程: 输入网址DNS 解析客户端发送 HTTP 请求建立 TCP 连接服务器处理请求, 计算响应, 返回响应浏览器渲染页面关闭连接 本篇中只是概述整…

docker 操作手册

名词解释 images:封装了应用程序的镜像 tag:镜像的标记,一个镜像可以创建多个标记 container:装载镜像并运行 常用命令 查看容器 docker ps -a //查看全部镜像 启动容器 docker start mysql //启动mysql容器 停止容器 doc…

Maven(三):Maven的组成详解

文章目录 坐标和依赖坐标详解依赖配置依赖范围传递性依赖依赖调节可选依赖优化排除依赖归类依赖优化依赖 仓库本地仓库远程仓库仓库镜像常用搜索地址 生命周期与插件三套生命周期clean生命周期default生命周期site生命周期 插件 聚合与继承更加灵活的构建常见问题使用jdk来运行…

TuyaOS 开发固件OTA上传固件指南

文章目录 一、产品创建二、TuyaOS设备开发三、固件上传 通过TuyaOS接入涂鸦云的产品全部默认支持固件OTA功能,TuyaOS设备实现固件OTA需要: 自定义产品创建TuyaOS嵌入式开发固件上传固件OTA配置与发布 等步骤实现产品OTA。本文重点讲述TuyaOS开发模式下&…

基于数据驱动 U-Net 模型的大气污染物扩散快速预测,提升计算速度近6000倍

项目背景 当前,常见的大气污染预测模型大多是基于物理机理构建的,比如空气质量预测模型 Calpuff、AERMOD、CMAQ 等。然而,这些模型运算较为复杂,对于输入数据的要求非常高,运算耗时也比较长,适合用于常规固…

如何在 ZBrush 和 UE5 中创建精灵吟游诗人(P1)

小伙伴们大家好,今天 云渲染小编给大家带来的是CG艺术家Hugo Sena关于“精灵吟游诗人”项目背后的工作流程,讨论了角色身体、服装和竖琴的工作流程,并解释了如何在虚幻引擎 5 中设置灯光。篇幅较长,分为上下两篇,大家接…

为摸鱼助力:一份Vue3的生成式ElementPlus表单组件

目录 一、实现背景 二、简介 三、组织架构设计 四、实现方式 五、代码示例 六、示例代码效果预览 七、项目预览地址 & 项目源码地址 目前项目还有诸多待完善的地方,大家有好的想法、建议、意见等欢迎再次评论,或于github提交Issues 一、实现…

【吃透网络安全】2023软考网络管理员考点网络安全(三)计算机系统安全评估

涉及知识点 计算机系统安全评估准则,计算机系统安全评估历史,软考网络管理员常考知识点,软考网络管理员网络安全,网络管理员考点汇总。 后面还有更多续篇希望大家能给个赞哈,这边提供个快捷入口! 第一节…

解决vue依赖报错SockJSServer.js出现Cannot read property ‘headers‘ of null

前言 在做新的需求需要变更vue的项目代码时突然出现报错 TypeError: Cannot read property ‘headers’ of null at Server.socket.on (***/node_modules/webpack-dev-server/lib/servers/SockJSServer.js:68:32) 不清楚为什么突然出现了这个问题,之前在这个vue项目…

【安全】使用docker安装Nessus

目录 一、准备docker环境服务器(略) 二、安装 2.1 搜索镜像 2.2 拉取镜像 2.3 启动镜像 三、离线更新插件 3.1 获取challenge 3.2 官方注册获取激活码 3.3 使用challenge码和激活码获取插件下载地址 3.4 下载的插件以及许可协议复制到容器内 四…

数据结构第六章 图 6.4 图的应用 错题整理

4.A A. 不是简单路径的话,有环,去环路径会更短 B. 适合的 弗洛伊德算法才不适合 C. 本来就是 D 2X2矩阵拓展到3X3矩阵 再扩大 若是子集 即加入新顶点后,最短路径都没有变,错 5.B 本题用弗洛伊德更合适 但这道题只需全部代入求最…

PowerShell系列(七)PowerShell当中的Provider介绍

往期回顾PowerShell系列(一):PowerShell介绍和cmd命令行的区别 PowerShell系列(二):PowerShell和Python之间的差异介绍 PowerShell系列(三):PowerShell发展历程梳理 P…

@DateTimeFormat与@JsonFormat不完全解析

目录 前言测试代码DateTimeFormat不加任何注解的情况普通请求JSON请求 JsonFormat普通请求JSON请求 其他方式(InitBinder)结论源码地址 前言 一直以来对DateTimeFormat与JsonFormat 比较模糊,容易搞忘,今天就做个笔记&#xff0c…

UE4自定义资产类型编辑器实现

在虚幻引擎中,资产是具有持久属性的对象,可以在编辑器中进行操作。 Unreal 附带多种资源类型,从 UStaticMesh 到 UMetasoundSources 等等。 自定义资源类型是实现专门对象的好方法,这些对象需要专门构建的编辑器来进行高效操作。 …

SQL语言的四大组成部分——DCL(数据控制语言)

1️⃣前言 SQL语言中的DCL(Data Control Language)是一组用于控制数据库用户访问权限的语言,主要包括GRANT、REVOKE、DENY等关键字。 文章目录 1️⃣前言2️⃣DCL语言3️⃣GRANT关键字4️⃣REVOKE关键字5️⃣DENY关键字6️⃣总结附&#xff1…

【kubernetes】部署网络组件Calico与CoreDNS

前言:二进制部署kubernetes集群在企业应用中扮演着非常重要的角色。无论是集群升级,还是证书设置有效期都非常方便,也是从事云原生相关工作从入门到精通不得不迈过的坎。通过本系列文章,你将从虚拟机配置开始,到使用二进制方式从零到一搭建起安全稳定的高可用kubernetes集…

基于YOLO V8的车牌识别

赵春江 2023年6月 1、前言 十年前就想实现车牌识别这项任务,虽然当时这项技术就已较成熟(与现在的实现方法不同),但那时的我还具备这个能力。弹指一瞬间,没想到十年间人工智能技术已经发展到一个新的高度&#xff0c…

Nacos架构与原理 - 健康检查机制

文章目录 注册中心的健康检查机制Nacos 健康检查机制临时实例健康检查机制永久实例健康检查机制集群模式下的健康检查机制 注册中心的健康检查机制 想象发生地质灾害,被掩埋在废墟下,搜救队需定位才能施救。两种方法: 大喊求救,告知位置与健康状况,让搜救队知晓搜救队使用专业…

社区活动 | OpenVINO™ DevCon 中国系列工作坊第二期 | 使用 OpenVINO™ 加速生成式 AI...

生成式 AI 领域一直在快速发展,许多潜在应用随之而来,这些应用可以从根本上改变人机交互与协作的未来。这一最新进展的一个例子是 GPT 模型的发布,它具有解决复杂问题的能力,比如通过医学和法律考试这种类似于人类的能力。然而&am…