小白都懂的Python爬虫之网易云音乐下载

2023-05-16

微信又改版了,为了方便第一时间看到我们的推送,请按照下列操作,设置“置顶”:点击上方蓝色字体“程序员之家”-点击右上角“…”-点击“设为星标”。

可以啦,让我们继续相互陪伴。


源 /  网络

目标

偶然的一次机会听到了房东的猫的《云烟成雨》,瞬间迷上了这慵懒的嗓音和学生气的歌词,然后一直去循环听她们的歌。然后还特意去刷了动漫《我是江小白》,好期待第二季…

我多想在见你,哪怕匆匆一眼就别离…
好了,不说废话了。这次的目标主要是根据网易云中歌手的ID,下载该歌手的热门音乐的歌词和音频,并保存到本地的文件夹中。

配置基础

Python

Selenium(配置方法参照:Selenium配置)

Chrome浏览器(其它的也可以,需要进行相应的修改)

分析

如果爬取过网易云的网站的小伙伴都应该知道网易云是有反爬取机制的,POST时需要对一些信息的参数进行加密函数的模拟。但是这里为了简便,小白也能理解。直接使用了Selenium来模拟登录,然后使用接口来直接下载音乐和歌词。

实验步骤:

  • 根据歌手ID获取该歌手的热门歌曲列表,歌曲名称和链接,并保存到csv文件中;

  • 读取csv文件,根据歌曲链接,提取歌曲ID,然后利用相应的接口,下载音乐和歌词;

  • 将音乐和歌词保存到本地。

Python实现

该部分将对几个关键的函数进行介绍…

获取歌手信息
利用Selenium我们就不需要看对网页的请求了,直接可以从网页源码中提取相应的信息。查看歌手页面源码可以发现,我们需要的信息在iframe框架内,所以我们先需要切换到iframe:

browser.switch_to.frame('contentFrame')

继续往下看,发现我们需要的歌曲名字和链接是在id=”hotsong-list”的标签中,然后每一行对应的是一个tr标签。所以先获取所有的tr内容,然后遍历单个tr。

data = browser.find_element_by_id("hotsong-list").find_elements_by_tag_name("tr")

注意:前一个是find_element,后一个是find_elements,后者返回一个列表。

接下来就是解析单个tr标签的内容,获取歌曲名字和链接,可以发现两者在class=”txt”标签中,而且链接是href属性,名字是title属性,可以直接通过get_attribute()函数获取。

for i in range(len(data)):
   content = data[i].find_element_by_class_name("txt")
   href = content.find_element_by_tag_name("a").get_attribute("href")
   title = content.find_element_by_tag_name("b").get_attribute("title")
   song_info.append((title, href))

下载歌词

网易云有个获取歌词的接口,链接为:http://music.163.com/api/song…

链接中的数字就是歌曲的id,所以我们拥有歌曲id后,可以直接从该链接下载歌词,歌词文件是json格式,所以我们需要用到json包。

而且直接获取的歌词中,每行有一个时间轴,需要用正则表达式来剔除,完整代码如下:

def get_lyric(self):
   url = 'http://music.163.com/api/song/lyric?' + 'id=' + str(self.song_id) + '&lv=1&kv=1&tv=-1'
   r = requests.get(url)
   json_obj = r.text
   j = json.loads(json_obj)
   lyric = j['lrc']['lyric']
   # 利用正则表达式去除时间轴
   regex = re.compile(r'\[.*\]')
   final_lyric = re.sub(regex, '', lyric)
   return final_lyric

下载音频

网易云也提供了音频文件的接口,链接为:http://music.163.com/song/med…

链接中的数字为歌曲的id,可以直接根据歌曲的id来下载音频文件。完整代码如下:

def get_mp3(self):
   url = 'http://music.163.com/song/media/outer/url?id=' + str(self.song_id)+'.mp3'
   try:
       print("正在下载:{0}".format(self.song_name))
       urllib.request.urlretrieve(url, '{0}/{1}.mp3'.format(self.path, self.song_name))
       print("Finish...")
   except:
       print("Fail...")

Reference
python 根据网易云歌曲的ID 直接下载歌曲  https://blog.csdn.net/qq_38282706/article/details/80300546
Windows上安装Selenium爬取网易云歌曲  https://zhuanlan.zhihu.com/p/42078956
源码地址

Github:https://github.com/blueberryc/web_crawler/blob/master/code/WYmusic.zip


公众号内回复“1”带你进粉丝群640?wx_fmt=gif

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小白都懂的Python爬虫之网易云音乐下载 的相关文章

  • Android zxing 二维码扫描和生成方法(简单版)

    前言 二维码大家都见识过 xff0c 这里就不废话了 xff0c 直接来干货 步骤 导入依赖 compile span class hljs string 39 com google zxing core 3 2 1 39 span spa
  • 开源库BaseRecyclerViewAdapterHelper的简单用法

    前言 BaseRecyclerViewAdapterHelper 是用于对RecycleView的数据绑定以及定义事件的一系列超级简单的一个adapter xff0c 下面我们就来学习他的用法 用法 xff08 介绍两种 xff09 配置环
  • 关于虚拟化(virtualization)的一些知识

    什么是虚拟化 xff08 virtualization xff09 首先是wiki上面对于虚拟化的定义 In computing virtualization refers to the act of creating a virtual
  • Node.js 连接MongoDB,并实现浏览器GET请求加参数

    前言 最近学习了Node js xff0c 并且接触了MongoDB 因此想做一个浏览器访问一个http地址获取数据库里的数据的例子 xff0c 本文使用的是Node js作为接口 具体内容 Node js要准备的东西 express模块
  • ListView 分页简单写法

    前言 关于Android 端ListView分页的做法之前一直不懂 xff0c 碰巧项目中遇到了 xff0c 所以在这边记录下学习的成果 分页 xff1a 当用户在ListView界面上的时候不会加载全部的数据 xff0c 而是从服务端加载
  • 冒泡排序算法小结

    冒泡排序 原理 xff1a 比较两个相邻的元素 xff0c 将值大的元素交换至右端 思路 xff1a 依次比较相邻的两个数 xff0c 将小数放在前面 xff0c 大数放在后面 即在第一趟 xff1a 首先比较第1个和第2个数 xff0c
  • 2018.7.20 阶段小结

    前言 好久没写博客了 xff0c 距离上次写博客应该是几个月前的事情了 现在是一名毕业生 xff0c 在上海 xff0c 这个压力比较大的城市工作 xff0c 第一份工作的薪水还行 xff0c 虽然跟当初上大学时期望的有点出入 xff0c
  • 附录A 进阶游戏编程书籍总结与推荐

    章节导读 很多游戏编程书籍都有一个通病 xff0c 一本书写完 xff0c 读者看完之后 xff0c 不知道下一步该如何前进 这里的附录就是让大家看完这本书后 xff0c 知道自己接下来可以学习什么 xff0c 如何进一步提升自己 为学习思
  • 自己写的Arch Linux自动安装脚本

    自己写的Arch Linux自动安装脚本 https github com iceshroom Arch Install 脚本将自动添加用户 xff1a admin xff0c 密码为 admin123 暂不支持自定义账户 More det
  • Linux系统通过firewall限制或开放IP及端口

    一 查看防火墙状态 1 首先查看防火墙是否开启 xff0c 如未开启 xff0c 需要先开启防火墙并作开机自启 systemctl status firewalld 开启防火墙并设置开机自启 systemctl start firewall
  • Redis集群添加数据报错(error) CLUSTERDOWN The cluster is down

    连接到Redis集群 xff0c 添加向集群中添加数据 xff0c 出现如下错误 xff1a error CLUSTERDOWN The cluster is down 我上网上查了查 xff0c 发现导致这个错误的原因很多 xff0c 这
  • Ubuntu 22.04.2 LTS点云PCL库的安装

    先简单说明一下我的病情 xff0c 我的Ubuntu版本是22 04 xff0c 在没有安装点云之前就已经安装的QT5和Anaconda的运行环境 开始的时候我是通过直接apt安装PCL库的 xff0c 但是有点问题 xff0c 跑网上给的
  • Android_Google Pay的添加使用

    虽然国内的支付宝 微信支付这么火热 但是我们在国外开发的时候 免不了还是会遇到使用Google Pay的时候 一 注册您的应用程序 你必须注册通过API控制台访问谷歌API的所有应用程序 注册过程导致了一组已知只有谷歌和你的应用程序 xff
  • 素数的几种判断方法总结(含C++代码)

    素数的几种判断方法总结 xff08 含C 43 43 代码 xff09 一 素数定义二 素数判断方法1 定义法2 定义法改进3 取模法5 筛选法改进 三 总结 一 素数定义 素数 xff08 prime number xff09 xff0c
  • [Python黑帽] 三.编程实现IP及端口扫描器、实现多线程C段扫描器

    Python黑帽第三篇文章将分享网络扫描基础知识 xff0c 编程实现IP及端口扫描器 实现多线程C段扫描器 本文参考了 Python绝技 书籍和i春秋ADO老师的课程内容 xff0c 这里真心推荐大家去学习ichunqiu课程 xff0c
  • [Python从零到壹] 五.网络爬虫之BeautifulSoup基础语法万字详解

    欢迎大家来到 Python从零到壹 xff0c 在这里我将分享约200篇Python系列文章 xff0c 带大家一起去学习和玩耍 xff0c 看看Python这个有趣的世界 所有文章都将结合案例 代码和作者的经验讲解 xff0c 真心想把自
  • [Python从零到壹] 六.网络爬虫之BeautifulSoup爬取作者个人博客网站详解

    欢迎大家来到 Python从零到壹 xff0c 在这里我将分享约200篇Python系列文章 xff0c 带大家一起去学习和玩耍 xff0c 看看Python这个有趣的世界 所有文章都将结合案例 代码和作者的经验讲解 xff0c 真心想把自
  • Android Q 上的Biometric生物识别

    生物识别架构 Android Q版本不再使用相对独立的指纹识别或是人脸识别板块 xff0c 而是转而使用一个相对大的笼统的架构 就是生物识别 Biometric xff0c 基于生物特征的因素允许在平台上进行安全身份验证 xff0c 目前在
  • Android Q 上的Biometric生物识别之Face人脸识别流程

    第一部分 xff0c 人脸识别身份验证HIDL 借助人脸识别身份验证功能 xff0c 用户只需要将自己的面孔对准设备即可将其解锁 Android 10 增加了对一种新的人脸识别身份验证堆栈的支持 xff0c 这种堆栈可安全处理摄像头帧 xf
  • PHP 扩展与 ZEND 引擎的整合

    PHP 扩展是对 PHP 功能的一个补充 xff0c 编写完 PHP 扩展以后 xff0c ZEND 引擎需要获取到 PHP 扩展的信息 xff0c 比如 phpinfo 函数是如何列出 PHP 扩展的信息 xff0c PHP 扩展中的函数

随机推荐

  • 【米哈游】2022春季校园招聘

    作者 xff1a 咖喱吉吉 链接 xff1a 米哈游 2022春季校园招聘网申开始啦 xff01 校园大使内推 招聘信息 牛客网 来源 xff1a 牛客网 在这里有超多业界顶尖游戏制作大牛 xff0c 等你一起来创作最激动人心的面向未来的产
  • thymeleaf在SpringBoot中的配置

    spring boot使用thymeleaf版本问题 Spring boot默认使用的是thymeleaf的2版本 xff0c 这个版本比较低 xff0c 有些功能不支持 xff0c 需要切换成3版本 thymeleaf在版本中的配置 xf
  • 内存分配函数

    1 malloc 函数 xff1a void malloc unsigned int size 在内存的动态分配区域中分配一个长度为size的连续空间 xff0c 如果分配成功 xff0c 则返回所分配内存空间的首地址 xff0c 否则返回
  • powershell美化

    前言 重装系统后 xff0c 又用到了那个无比丑陋的powershell xff08 bushi xff09 还是之前通过oh my posh美化过的好看 但是跟着网上的好多教程都没有美化成功 xff0c 都是说什么oh my posh 无
  • shell调用自定义函数及传参

    1 单个参数 bin bash function LoopPrint count 61 0 while count lt 1 do echo count let 43 43 count sleep 1 done return 0 read
  • 虚拟机 怎么进入到命令方式

    一般启动虚拟机 进入到的页面是这样的 xff1a 1 快捷键 xff1a Ctrl 43 Shift 43 F5切换到命令登陆界面 或者ctrl 43 alt 43 f5 2 快捷键 xff1a Ctrl 43 Shift 43 F1切换到
  • Android的环境搭建、内核和源码build

    Android源代码下载和编译 xff1a http source android com source initializing html 按照官方指导 xff0c 成功Build xff01 Android开发环境的搭建 xff1a h
  • 2017秋招求职历程总结

    2017秋招求职历程总结 从小的梦想就是有朝一日能够进入汽车行业工作 xff0c 很幸运刚毕业的第一份工作便实现了此梦想 xff0c 感谢大学遇到的那些人 终于在国庆之前拿到了一份还算满意的offer 9月1号从实习单位离职准备接下来的秋招
  • springcloud如何搭建支付宝pay-service微服务

    文章目录 小提示逻辑图配置pom xmlpay service dev yamlbootstrap yml 开搞AlipayPropertiesAlipayConfig控制器各接口代码演示所对应的封装对象PayVo支付接口参数对象Refun
  • 阿里巴巴常用的 12 个后端开发工具

    从手动编码到自动化 xff0c 从重复工作到创新 xff0c 开发人员工具随着技术的发展而不断发展 阿里巴巴集团和阿里巴巴云已通过开源发布和基于云的实施向公众提供其技术 通过在各种业务场景中的多年开发积累了这些技术 本文介绍了一些阿里巴巴开
  • Ubuntu卡在登陆界面循环

    文章目录 一 现象二 原因三 解决措施 一 现象 先卡在这 xff1a a start job is running for hold until boot process finishes up 22s no limit 然后卡在这里 二
  • SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further

    报错 xff1a SLF4J Failed to load class org slf4j impl StaticLoggerBinder SLF4J Defaulting to no operation NOP logger implem
  • AWVS(Acunetix Web Vulnerability Scanner) Ubuntu下安装依赖缺失问题及解决

    最近在安装使用AWVS时 xff0c 安装出现了如下问题 xff0c 报错 Checking os Checking for dependencies dependency libgtk 3 so 0 not found on the sy
  • busybox login: root Login incorrect

    answer The file etc securetty comes with self explained header 34 etc securetty List of terminals on which root is allow
  • 在Macbook Pro上安装支持GPU的TensorFlow

    上一篇博文 在Macbook Pro上为TensorFlow设置GPU 中 xff0c 我们已经为Macbook上的NVIDIA显卡安装了各种驱动 xff0c 保证各种深度学习框架能够使用GPU进行计算 这儿就总结一下在后续安装Tensor
  • EXCEL 2016常用知识--Excel基础操作

    从数据填充开始讲起 xff0c 介绍Excel内置各种功能 xff0c 如筛选 查询 粘贴 单元格类型等 excel 窗口组成介绍 xff1a 1 快速访问工具栏 xff1a 添加你常用的命令 xff0c 方便我们快速操作和访问 xff1b
  • vue安装scss时报The “path“ argument must be of type string. Received undefined

    在安装vue安装scss时报The path argument must be of type string Received undefined 解决方式 xff1a 这个错误是sass loader 版本造成的 xff0c 此时的版本是
  • 利用python语言制作简单的音乐播放器

    from tkinter import from tkinter import filedialog from pygame locals import import time import pygame import sys pygame
  • 支撑程序员的三种精神

    我注意到有三种精神指引着软件开发人员的灵魂 伟大的艺术家精神 xff0c 可信赖的员工精神和自私的实用主义精神 伟大的艺术家精神 如果你听到一种声音说 你不能这样画 xff0c 然后 xff0c 你继续这样画 xff0c 这种反对的声音就会
  • 小白都懂的Python爬虫之网易云音乐下载

    微信又改版了 xff0c 为了方便第一时间看到我们的推送 xff0c 请按照下列操作 xff0c 设置 置顶 xff1a 点击上方蓝色字体 程序员之家 点击右上角 点击 设为星标 可以啦 xff0c 让我们继续相互陪伴 源 网络 目标 偶然