Python爬虫项目实战案例-批量下载网易云榜单音乐保存至本地


✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭
~✨✨

🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。

我是Srlua,在这里我会分享我的知识和经验。🎥

希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮

记得先点赞👍后阅读哦~ 👏👏

📘📚 所属专栏:Python
欢迎访问我的主页:Srlua 获取更多信息和资源。✨✨🌙🌙

目录

Python爬虫项目实战案例-批量下载网易云榜单音乐

request模块安装下载

win平台安装

如何查看是否安装成功?

pycharm中安装

成功爬取网易云的源代码

提取出榜单的音乐id和音乐名称

实现批量下载

文件创建

手动创建 / os模块自动创建

运行程序

爬取ing

自动下载至路径文件夹

如何爬取其他榜单?

切换榜单id,爬取成功!

完整代码


Python爬虫项目实战案例-批量下载网易云榜单音乐

request模块安装下载

win平台安装

Win平台: “以管理员身份运行”cmd,执行pip install requests

如何查看是否安装成功?

查看以上截图会显示Successfully installed...,即表示安装成功。

也可以在Win平台: “以管理员身份运行”cmd,执行pip list,查看到以下截图显示requests,即表示安装成功。

pycharm中安装

如果不行的话,也可以通过pycharm中的提示,安装install request packages

首先,我们进入网易云音乐官网 ,选择需要爬取的音乐榜单

这里博主选择热歌榜

想要爬取这些歌曲的话,我们需要获取它的音乐名字和它的音乐id

右击网页页面选择检查进入开发者模式,或者通过按键盘上的F12进入

然后我们control+r刷新页面

选择标头(headers)获取请求url的内容

把request header里的User-Agent:复制到header中

User-Agent:就是我们浏览器的基本信息

成功爬取网易云的源代码

使用Python中的requests库发送一个GET请求,并获取指定URL的网页源代码。

response = requests.get(url=url, headers=headers)
print(response.text)获取网页源代码

查看搜索控制台的内容

结合正则表达式查询

'<li><a href="/song\?id=(\d+)">(.*?)</a>'

这是一个正则表达式,用于匹配HTML中的特定模式。具体来说,它匹配的是一个<li>标签内的<a>标签,其中<a>标签的href属性以"/song?id="开头,后面跟着一串数字(由\d+表示),然后是">"和任意字符(由(.*?)表示),最后是闭合的</a>标签。

这个正则表达式可以用于从HTML中提取歌曲链接和歌曲名称。例如,如果有一个HTML字符串如下:

<ul><li><a href="/song?id=123">歌曲1</a></li><li><a href="/song?id=456">歌曲2</a></li>
</ul>

使用这个正则表达式进行匹配,可以得到两个结果:

  1. /song?id=123歌曲1

  2. /song?id=456歌曲2

提取出榜单的音乐id和音乐名称

使用正则表达式从HTML文本中提取歌曲的ID和标题。

首先,使用re.findall()函数来查找所有匹配的字符串。

正则表达式<li><a href="/song\?id=(\d+)">(.*?)</a>用于匹配以<li><a href="/song?id=开头,后面跟着一串数字(由\d+表示),然后是">和任意字符(由(.*?)表示),最后是闭合的</a></li>标签。

在每次循环中,num_id变量存储歌曲的ID,title变量存储歌曲的标题。然后,通过print()函数将它们打印出来。

实现批量下载

成功获取id和名称之后,我们就可以准备进行下载的部分了

尝试调用接口播放

成功播放

music_url = f'http://music.163.com/song/media/outer/url?id={num_id}.mp3'  
# 对于音乐播放地址发送请求 获取二进制数据内容   
music_content = requests.get(url=music_url, headers=headers).content   
with open(filename +title +'.mp3', mode='wb') as f:        f.write(music_content)

这段代码用于下载歌曲的MP3文件。

首先,它使用f-string将歌曲ID插入到音乐URL中,生成完整的音乐播放地址。

然后,通过requests.get()函数发送请求获取二进制数据内容。

最后,使用open()函数以写入二进制模式打开一个文件,并将音乐内容写入该文件中。文件名由filenametitle拼接而成,并以.mp3作为扩展名。

文件创建

手动创建 / os模块自动创建

博主这里选择用os模块创建

运行程序

爬取ing

自动下载至路径文件夹

如何爬取其他榜单?

如果想要爬取其他的榜单的歌曲内容,只要更改请求url中的id

切换榜单id,爬取成功!

完整代码


import requests  # 数据请求模块 第三方模块 pip install requests
import re  # 正则表达式模块 内置模块 不需要安装
import os  # 文件操作模块
​
filename = 'music\\'
​
if not os.path.exists(filename): # 如果没有这个文件夹则自动创建os.mkdir(filename)
​
# 如果想要爬取其他的榜单的歌曲内容,只要更改请求url中的id
​
url = 'https://music.163.com/discover/toplist?id=3778678'
# headers请求头 就是用伪装python代码的 把python代码伪装成浏览器对于服务器发送请求
# 服务器接收到请求之后,会给我们返回响应数据(response)
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0'
}
response = requests.get(url=url, headers=headers)
#print(response.text)获取网页源代码
# 正则表达式提取出来的一个内容 返回是列表 里面每一个元素都是元组
html_data = re.findall('<li><a href="/song\?id=(\d+)">(.*?)</a>',response.text)
for num_id, title in html_data:# http://music.163.com/song/media/outer/url?id=436346833.mp3music_url = f'http://music.163.com/song/media/outer/url?id={num_id}.mp3'# 对于音乐播放地址发送请求 获取二进制数据内容music_content = requests.get(url=music_url, headers=headers).contentwith open(filename +title +'.mp3', mode='wb') as f:f.write(music_content)print(num_id, title)
​

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车后视镜反射率检测仪厂家

随着汽车工业的快速发展&#xff0c;汽车后视镜作为驾驶员观察车辆周围环境的重要工具&#xff0c;其性能和质量对于交通安全至关重要。汽车后视镜的反射率检测仪是一种用于检测汽车后视镜反射性能的专业设备&#xff0c;其重要性不言而喻。本文将重点介绍汽车后视镜反射率检测…

射频识别RFID

射频识别&#xff08;RFID&#xff09;是 Radio Frequency Identification 的缩写。 射频识别技术是自动识别技术的&#xff0c;通过无线射频方式进行非接触双向数据通信&#xff0c;利用无线射频方式对记录媒体&#xff08;电子标签或射频卡&#xff09;进行读写&#xff0c;…

【jest使用】

Quick Start 安装&#xff1a; npm install --save-dev jest让我们开始为一个假设函数编写测试&#xff0c;该函数将两个数字相加。 首先&#xff0c;创建一个 sum.js 文件&#xff1a; function sum(a, b) {return a b; } module.exports sum;然后&#xff0c;创建一个名…

Mallox勒索病毒的最新威胁:如何恢复您的数据?

引言&#xff1a; 在当今数字化时代&#xff0c;网络安全威胁层出不穷&#xff0c;而勒索软件&#xff08;Ransomware&#xff09;是其中最为恶劣的一种形式之一。而.Mallox勒索病毒则是近期备受关注的一种勒索软件&#xff0c;其深受全球各地用户的困扰。那么&#xff0c;让我…

VMWare ESXi安装留档

缘起 由于手边的一台Dell R730是三块硬盘raid0 &#xff0c;把我惊出一身冷汗&#xff0c;准备把它们改组成raid1 或者raid5 。 但是舍不得里面的ESXi 8 &#xff0c;在寻找能否把raid0改成raid1 还不掉WSXi的方法&#xff0c;很遗憾没有找到。 ESXi软件下载 这样就要重装E…

畅心付推出二维码收款分账,开启简单分账新篇章!

随着商业环境和消费需求的变化&#xff0c;新的商业模式不断涌现&#xff0c;加速产业转型和数字化进程&#xff0c;传统商业模式也在进行变革&#xff0c;比如以往的收租模式就是其中很典型场景之一&#xff0c;如今传统租金也将迎来全面革新。畅心付推出二维码收款分账&#…

『大模型笔记』检索增强生成(RAG):从理论到LangChain实践

检索增强生成(RAG):从理论到LangChain实践 文章目录 一. 什么是检索增强生成(Retrieval-Augmented Generation, RAG)1.1. 问题背景1.2. 解决方案二. 基于LangChain实现的检索增强生成方法2.1. 准备工作2.2. 准备步骤2.3. 第一步:检索2.4. 第二步:增强2.5. 第三步:生成三. 总…

面试中单例模式有几种写法?

“你知道茴香豆的‘茴’字有几种写法吗&#xff1f;” 纠结单例模式有几种写法有用吗&#xff1f;有点用&#xff0c;面试中经常选择其中一种或几种写法作为话头&#xff0c;考查设计模式和coding style的同时&#xff0c;还很容易扩展到其他问题。这里讲解几种猴子常用的写法&…

探讨:围绕 props 阐述 React 通信

在 ✓ &#x1f1e8;&#x1f1f3; 开篇&#xff1a;通过 state 阐述 React 渲染 中&#xff0c;以 setInterval 为例&#xff0c;梳理了 React 渲染的相关内容。 &#x1f4e2; 本篇会 ✓ &#x1f1e8;&#x1f1f3; 围绕 props 阐述 React 通信 props React 组件使用 pro…

docker安装单机版canal和使用

说明&#xff1a;我安装的组件架构如下&#xff1a; 1、准备一台虚拟机&#xff0c;192.168.2.223&#xff0c;我安装的时候&#xff0c;docker只支持canal1.1.6版本&#xff0c;1.1.7无法使用docker安装.还有一点要补充&#xff0c;就是1.1.6好像不支持es8.0以上版本&#x…

Appium手机Android自动化

目录 介绍 什么是APPium&#xff1f; APPium的特点 环境准备 adb(android调试桥)常用命令 appium图形化简单使用 连接手机模拟器 使用appium桌面端应用程序 ​编辑 整合java代码测试 环境准备 引入所需依赖 书写代码简单启动 ​编辑 Appium元素定位 id定位 介…

前端配置开发环境,新电脑配置前端开发环境,Vue开发环境配置的详细过程(前端开发环境配置,电脑重置后配置前端开发环境)

简介&#xff1a;有时候&#xff0c;我们需要在新电脑 或者 电脑重置后&#xff0c;配置前端开发环境&#xff0c;具体都需要安装什么软件和插件&#xff0c;这里来记录一下&#xff08;文章适合新手和小白&#xff0c;大佬可以带过&#xff09;。 ✨前端开发环境&#xff0c;需…

《Spring Security 简易速速上手小册》第3章 用户认证机制(2024 最新版)

文章目录 3.1 认证流程3.1.1 基础知识详解认证流程的核心概念认证流程的步骤 3.1.2 主要案例&#xff1a;内存用户认证案例 Demo&#xff1a;快速启动你的 Spring Boot 守护程序 3.1.3 拓展案例 1&#xff1a;数据库用户认证案例 Demo&#xff1a;让数据库守护你的秘密 3.1.4 拓…

蓝桥杯备赛第二篇(背包问题)

1. 01 背包&#xff08;采用状态压缩&#xff09; public static void main(String[] args) {Scanner scanner new Scanner(System.in);int M scanner.nextInt();int N scanner.nextInt();int[] value new int[N 1];int[] weight new int[N 1];int[] dp new int[M 1];…

python的数据结构

文章目录 python的数据结构列表当做堆栈使用将列表当作队列使用 python的数据结构 列表 (List)&#xff1a;一种有序的集合&#xff0c;可以包含多个项目。列表中的项目可以轻松地添加、删除或更改。 my_list [1, 2, 3, 4, 5]列表当做堆栈使用 堆栈是一种后进先出&#xff…

代理IP安全问题:在国外使用代理IP是否安全

目录 前言 一、国外使用代理IP的安全风险 1. 数据泄露 2. 恶意软件 3. 网络攻击 4. 法律风险 二、保护国外使用代理IP的安全方法 1. 选择可信的代理服务器 2. 使用加密协议 3. 定期更新系统和软件 4. 注意网络安全意识 三、案例分析 总结 前言 在互联网时代&…

【postgresql 基础入门】带过滤条件的查询,where子句中的操作符介绍,案例展示,索引失效的大坑就在这里

查询数据-过滤数据 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献&#xff1a; toadb开源库 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#…

翻译平台翻译模型大模型 英翻中 en-zh 评测

评测语句 Trump was always bothered by how Trump Tower fell 41 feet short of the General Motors building two blocks north 结论 大模型翻译最佳&#xff0c;第三方里百度次之&#xff0c;翻译模型还不太行 测试过程 翻译模型 facebook mbart-large-50-many-to-many-…

【Unity】实现从Excel读取数据制作年份选择器

效果预览&#xff1a; 此处利用Excel来读取数据来制作年份选择器&#xff0c;具体步骤如下。 如果只是制作年份选择器可以参考我这篇文章&#xff1a;构建简单实用的年份选择器&#xff08;简单原理示范&#xff09; 目录 效果预览&#xff1a; 一、 Excel准备与存放 1.1 …

openssl3.2 - exp - calc PE file checksum and SHA3-512

openssl3.2 - exp - calc PE file checksum and SHA3-512 概述 想在程序中, 对自身的PE内容算校验和和HASH, 然后送给服务端判断PE文件是否被修改了. 前几天, 看了一个资料, 里面有算PE校验和的实现. 迁移到自己工程. 但是没有算HASH, 正好已经将openssl官方demo过了一遍, 有…