百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

python爬虫实战之—爬取网易云音乐

bigegpt 2024-08-22 10:30 2 浏览

对于喜欢听歌的朋友来说批量下载歌曲往往是一件很头疼的事,一次次打开歌曲,然后机械搬的点击下载,是不是想想都觉得不能忍呢~尤其是作为一名程序猿来说,如果你还在用两根手指做着这么低效率的工作,你是不是太out了呢?

今天给大家带来一款python制作的神器,专用于批量下载网易云音乐的歌单,操作非常之简单!

运行环境:Python3

相关模块:requests,bs4,tkinter,urllib

使用方式:

1. 将代码保存为python文件并运行

2. 在弹出的框中填入你要下载的歌单的url并点击开始下载如下

3. 下载完成

现在进入教学时间,已经给各位看官老爷备好了注释,有感兴趣的朋友可以了解一下:

第一部分:导入相关库

第二部分:设计图形界面

第三部分:写爬虫下载歌单中的歌曲

最后给大家分享一下整体代码,可以开心的下载歌曲去了,我先撤啦~

from tkinter import *
import requests
from bs4 import BeautifulSoup
from urllib.request import urlretrieve
#下载方法
def download():
 #通过输入控件获取url
 url = entry.get()
 #去除utl中的#号
 new_url = url.replace('/#', '')
 #设置header
 header = {
 'Host': 'music.163.com',# 指定请求的服务器的域名和端口号
 'Referer': 'https://music.163.com/',#先前网页的地址,当前请求网页紧随其后,即来路
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'
 #User-Agent的内容包含发出请求的用户信息
 }
 #发送get请求
 res = requests.get(new_url, headers=header).text
 #BeautifulSoup是用来从HTML或XML中提取数据的Python库。 对于不具备良好格式的 HTML 内容,lxml 提供了两个有用的包:lxml.html 模块和 BeautifulSoup 解析器。
 r = BeautifulSoup(res, "html.parser")
 music_dict = {}
 #提取歌单
 result = r.find('ul', {'class', 'f-hide'}).find_all('a')
 for music in result:
 print(music)
 music_id = music.get('href').strip('/song?id=')
 music_name = music.text
 #将每首歌的id存入music_dict
 music_dict[music_id] = music_name
 #按顺序下载每首歌
 for song_id in music_dict:
 song_url = "http://music.163.com/song/media/outer/url?id=%s" % song_id
#下载路径
 path = "D:\论文任务\音乐/%s.mp3" % music_dict[song_id]
 # 添加数据
 text.insert(END, "正在下载:%s" % music_dict[song_id])
 text.see(END)
 text.update()
 #urlretrieve用于下载资源到本地
 urlretrieve(song_url, path)
#Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 ,Tkinter用于python开发图形界面
root = Tk()
#名称
root.title("网易云音乐下载器")
#尺寸设定
root.geometry("550x400+550+230")
#设定标签的内容以及字体风格,大小
label = Label(root, text="歌单URL", font=('宋体', 15))
label.grid()
#Entry输入控件;用于显示简单的文本内容
entry = Entry(root, font=('微软雅黑', 20))
entry.grid(row=0, column=1)
text = Listbox(root, font=("微软雅黑", 15), width=45, height=10)
text.grid(row=1, columnspan=2)
#设置按钮的字体,内容,大小,以及按钮背后的功能
button = Button(root, text="开始下载", font=("微软雅黑", 15), command=download)
button.grid(row=2, column=0, sticky=W)
button1 = Button(root, text="退出", font=("微软雅黑", 15), command=root.quit)
button1.grid(row=2, column=1, sticky=E)
mainloop()

本文代码来源:https://blog.csdn.net/Bancroft_boy/article/details/80925487

友情提示:如有付费下载音乐,请尊重音乐版权!付费下载

作者:欧阳峰

申明:本文为易学智能原创内容,如需转载请私信

欢迎关注“易学智能”头条号,评论区有问必答

www.easyaiforum.cn提在线AI算力平台和学习平台

相关推荐

悠悠万事,吃饭为大(悠悠万事吃饭为大,什么意思)

新媒体编辑:杜岷赵蕾初审:程秀娟审核:汤小俊审签:周星...

高铁扒门事件升级版!婚宴上‘冲喜’老人团:我们抢的是社会资源

凌晨两点改方案时,突然收到婚庆团队发来的视频——胶东某酒店宴会厅,三个穿大红棉袄的中年妇女跟敢死队似的往前冲,眼瞅着就要扑到新娘的高额钻石项链上。要不是门口小伙及时阻拦,这婚礼造型团队熬了三个月的方案...

微服务架构实战:商家管理后台与sso设计,SSO客户端设计

SSO客户端设计下面通过模块merchant-security对SSO客户端安全认证部分的实现进行封装,以便各个接入SSO的客户端应用进行引用。安全认证的项目管理配置SSO客户端安全认证的项目管理使...

还在为 Spring Boot 配置类加载机制困惑?一文为你彻底解惑

在当今微服务架构盛行、项目复杂度不断攀升的开发环境下,SpringBoot作为Java后端开发的主流框架,无疑是我们手中的得力武器。然而,当我们在享受其自动配置带来的便捷时,是否曾被配置类加载...

Seata源码—6.Seata AT模式的数据源代理二

大纲1.Seata的Resource资源接口源码2.Seata数据源连接池代理的实现源码3.Client向Server发起注册RM的源码4.Client向Server注册RM时的交互源码5.数据源连接...

30分钟了解K8S(30分钟了解微积分)

微服务演进方向o面向分布式设计(Distribution):容器、微服务、API驱动的开发;o面向配置设计(Configuration):一个镜像,多个环境配置;o面向韧性设计(Resista...

SpringBoot条件化配置(@Conditional)全面解析与实战指南

一、条件化配置基础概念1.1什么是条件化配置条件化配置是Spring框架提供的一种基于特定条件来决定是否注册Bean或加载配置的机制。在SpringBoot中,这一机制通过@Conditional...

一招解决所有依赖冲突(克服依赖)

背景介绍最近遇到了这样一个问题,我们有一个jar包common-tool,作为基础工具包,被各个项目在引用。突然某一天发现日志很多报错。一看是NoSuchMethodError,意思是Dis...

你读过Mybatis的源码?说说它用到了几种设计模式

学习设计模式时,很多人都有类似的困扰——明明概念背得滚瓜烂熟,一到写代码就完全想不起来怎么用。就像学了一堆游泳技巧,却从没下过水实践,很难真正掌握。其实理解一个知识点,就像看立体模型,单角度观察总...

golang对接阿里云私有Bucket上传图片、授权访问图片

1、为什么要设置私有bucket公共读写:互联网上任何用户都可以对该Bucket内的文件进行访问,并且向该Bucket写入数据。这有可能造成您数据的外泄以及费用激增,若被人恶意写入违法信息还可...

spring中的资源的加载(spring加载原理)

最近在网上看到有人问@ContextConfiguration("classpath:/bean.xml")中除了classpath这种还有其他的写法么,看他的意思是想从本地文件...

Android资源使用(android资源文件)

Android资源管理机制在Android的开发中,需要使用到各式各样的资源,这些资源往往是一些静态资源,比如位图,颜色,布局定义,用户界面使用到的字符串,动画等。这些资源统统放在项目的res/独立子...

如何深度理解mybatis?(如何深度理解康乐服务质量管理的5个维度)

深度自定义mybatis回顾mybatis的操作的核心步骤编写核心类SqlSessionFacotryBuild进行解析配置文件深度分析解析SqlSessionFacotryBuild干的核心工作编写...

@Autowired与@Resource原理知识点详解

springIOCAOP的不多做赘述了,说下IOC:SpringIOC解决的是对象管理和对象依赖的问题,IOC容器可以理解为一个对象工厂,我们都把该对象交给工厂,工厂管理这些对象的创建以及依赖关系...

java的redis连接工具篇(java redis client)

在Java里,有不少用于连接Redis的工具,下面为你介绍一些主流的工具及其特点:JedisJedis是Redis官方推荐的Java连接工具,它提供了全面的Redis命令支持,且...