python爬虫实战零基础(3)——某云音乐

news2024/11/18 14:45:16

爬取某些云网页音乐,无需app

  • 分析网页
  • 第二种方式
    • 批量爬取

声明:仅供参考学习,参考,若有不足,欢迎指正

你是不是遇到过这种情况,在pc端上音乐无法下载,必须下载客户端才能下载?
那么,爬虫可以解决这个麻烦!继续实战利用request和xpath爬取网上音乐。

本文主要是在网页端下载音乐,如果你有客户端也可以,太高级的笔者也不会。这是一个基础皮毛的练习

分析网页

定位目标网址:(你也可以在浏览器打开某云之后随便进入一个歌单)
https://music.163.com/#/playlist?id=26467411

对于网页上的音乐在进行下载时,经常会弹出提示页面:请前往客户端下载!!!
非常讨厌了也是,好好的下载一首歌曲,非要弄得这么麻烦。甚至,有些音乐在下载了软件后,需要付费或者VIP,万恶的资本家。

本次实战就可以通过简单的爬虫解决以上问题,直接下载歌曲。

  • 首先,检查—> Network —> 刷新
  • 点击 文档(Doc),可以看到它的标头里面的请求网址为:
    https://music.163.com/playlist?id=26467411 这跟最开始是不一样的。

这是因为我们所请求的网址并非是浏览器地址栏上的网址,通过这张截图,很清晰的发现我们所请求的网址是哪个了。

  • 通过对每首歌曲打开,进行网页源代码分析不难发现,本网页的歌曲都有一个共同的特点:即前面的网址为 https://music.163.com/#/song?id= 加每首歌曲的 id 号。
    在这里插入图片描述
    然而,目前为止,我们仅仅是找到了些许规律,并没有找到歌曲的真正链接,要真正下载到每一首歌曲,还遥不可及。

音乐文件一般为mpeg,mp3,mpeg-4,midi,mwa,m4a等

到现在为止还没有请求音乐,当我们在进行点击播放时会发现:
在这里插入图片描述
当我们在进行播放音乐时,请求数量增多,说明该网页又重新进行了对网页的请求。通过重新查找发现(只需查看后面新的内容)这次有了一些 .m4a 文件。

当点击这些文件打开时会发现,有一个新的 Request URL:,当你将该网址复制在新的网页下进行打开,会出现如下图所示(打开时浏览器会自动进行下载该音乐)
在这里插入图片描述

结合上面的情况来说,我们是不是已经成功了呢?但很难过的告诉你,这个网址在短时间内打开,的确会有用,但是,它是有时间限制的,不信的话,你可以过五分钟(或许还不需要这么久)再重新打开该网址,试一下。
所以这种方式行不通,由于是初学者,我们就需要点外援了。

第二种方式

  • 这里介绍一个新的URL:(不要问这个怎么来的)

http://music.163.com/song/media/outer/url?id=

在之前的分析中,我们发现了一个很重要的一点,便是这10首歌曲都是一个网址加每首歌曲的id所在的新页面。

我们有了上面的这个网址,便可以为所欲为了。你现在便可以立马复制上面的链接,在网页上找到一首歌曲的id号添加至网址后面进行打开(如:http://music.163.com/song/media/outer/url?id=36897723),是不是得到了如下的界面:
在这里插入图片描述
通过这个页面就可以直接下载。

批量爬取

首先,每首音乐可以通过这个网址id 进行下载,所以,我们第一步便是想办法获取每首音乐的 id 。根据之前的分析,不难发现,每首音乐的 id 都在一个<a>标签内,我们只要获取这个<a>就可以了。

一步一步来开始写代码

  1. 根据真正的目标网址(注意真正的)获取源码信息
import requests
from lxml import etree

# 真实地址在Network--Doc
url = 'https://music.163.com/playlist?id=26467411'

# 请求(requests) 图片,视频,音频  content  | 字符串 text
html_str = requests.get(url).text
print(html_str)
print(type(html_str))    # 字符串类型

result = etree.HTML(html_str) 
  1. 从源码中用 xpath 找到每首歌的id和name
song_ids = result.xpath('//a[contains(@href,"/song?")]/@href')   # 歌曲id
song_names = result.xpath('//a[contains(@href,"/song?")]/text()')     # 歌名
# print(song_ids)
# print(song_names)     #列表
for song_id,song_name in zip(song_ids,song_names):
    print(song_id)
    print(song_name)

整理一下
通过打印发现,前面多了一些 /song?id= ,这时,便使用下面这行代码,进行删减,仔细观察打印结果发现后面多了三个无用的,这三个必须删掉才行,不然在进行后面的 URL 拼接,肯定会报错,因为压根就找不到这样的一个网址。

count_id = song_id.strip('/song?id=')   # 去掉/song?id=
    # print(count_id)
    # 过滤含有“$”符号
    if ('$' in count_id) == False:
        print(count_id)
  1. 拼接URL后,在浏览器里打开上面的任意链接 song_url,即可获取该音乐的链接,并进行下载。但是,我们最终的目的是让爬虫自动帮我们全部下载并进行保存至文件夹,利用 for 循环就可以啦
song_url = base_url + count_id      # 拼接url
print(song_url)
mp3 = requests.get(song_url).content
# 保存数据
with open('yinyue/{}.mp3'.format(song_name),'wb') as file:
	file.write(mp3)

如需完整代码,请自行查看。某云音乐爬取

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

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

相关文章

采集项目和数仓项目的关系

1.介绍 采集项目和数仓项目 采集和数仓是企业数据管理平台的2个核心功能模块,相对独立,所以可以独立开发 区别 功能 采集:数据的采集和传输 数仓:数据的存储 流程 数据库->数据采集->数据仓库->可视化界面 2.数据仓库 什么是数仓? 1.名称 数据库 : database…

杰克逊霍尔央行年会倒计时!鲍威尔压轴登场,美股能否重现“厄运九分钟”?

“央行行长的达沃斯论坛”——杰克逊霍尔央行年会将于美国当地时间本周四至周六举行&#xff0c;主题为“全球经济的结构性变化”&#xff0c;来自全球主要的央行行长、财政官员、经济学家、知名学者、财经媒体等齐聚一堂&#xff0c;共商经济前景和货币政策。 对于这些主要货币…

shopee马来西亚站市场情况如何?卖家怎么选品?

一、shopee马来西亚市场 马来西亚是东南亚的中心地带&#xff0c;拥有3,278万人口&#xff0c;其中30岁以下的年轻人占总人口的49%。马来西亚的经济发展较好&#xff0c;在电商市场方面具备良好的发展潜力。在热销品类方面&#xff0c;母婴用品、时尚服饰、美妆保健品和家居用…

数据库-表连接的几种方式

文章目录 1. 数据库表连接方式简介2. 内连接&#xff08;INNER JOIN&#xff09;3. 左外连接&#xff08;LEFT JOIN&#xff09;4. 右外连接&#xff08;RIGHT JOIN&#xff09;5. 全连接&#xff08;FULL OUTER JOIN&#xff09;6. 交叉连接&#xff08;CROSS JOIN&#xff09…

vue组件的使用

一、首先要穿件组件构造器对象&#xff0c;或者导入组件 1..在本部分注册组件其中组件为子组件 2.在本部分注册组件 二、而后注册组件 1.在本部分注册组件其中组件为子组件 2.在本部分注册组件 三、 接着&#xff0c;使用组件。 1.在本部分注册组件其中组件为子组件 其中v-i…

帮助中心应该用什么工具做?

在线帮助中心是指一个位于互联网上的资源平台&#xff0c;提供给用户获取产品或服务相关信息、解决问题以及获取技术支持的渠道。它通常包含了组织化的知识库、常见问题解答&#xff08;FAQ&#xff09;、操作指南、教程视频、用户手册等内容。在线帮助中心的主要目标是为用户提…

M1 Pro 利用docker 搭建pytho2的开发环境,以vscode连接开发为例

使用 M1 Pro &#xff08;不支持python2的安装&#xff09;开发&#xff0c;需要使用 Python 2.7 的环境&#xff0c;在使用 pyenv 安装 Python 2 时遇到了各种奇怪的问题。最终&#xff0c;我决定使用 Docker 搭建开发环境&#xff0c;并使用 VS Code 连接到本地容器。以下是详…

run control for NI-RT

1.carsim运行配置 ①为选择车辆模型运行的平台&#xff1b; ② NIRT 平台&#xff08;transfer to NI-RT target&#xff09;&#xff1b; ③是选择车辆模型的配置文件&#xff08;包含NI 实时机连接配置及车辆输入输出接口配置&#xff09; 2.配置文件设置 选择模型传输方式“…

Discuz!论坛发帖标题字数限制80字符可以修改吗?修改发帖标题字数的方法

Discuz!论坛发帖标题字数限制80字符修改方法 1.数据库修改2.修改JS验证字符数文件3.修改模板中写死的字符限制数4.修改函数验证文件5.修改语言包文件6.更新缓存 Discuz X3.4论坛网站帖子标题字数限制80字符&#xff0c;当我们想使用长标题的时候就得一删再删&#xff0c;实在是…

编写Dockerfile制作Web应用系统nginx镜像

文章目录 题目要求&#xff1a;一、创建文档&#xff0c;编写Dockerfile文件可以将harbor仓库去启动先起来 二、运行Dockerfile&#xff0c;构建nginx镜像三、推送导私有仓库&#xff0c;也就是我们的harbor仓库 题目要求&#xff1a; 编写Dockerfile制作Web应用系统nginx镜像…

高效公文校对与文字处理:走进自然语言技术的新时代

在数字化时代的浪潮中&#xff0c;无论是政府材料、新闻稿、还是发言稿&#xff0c;高质量的文字内容成为了信息传递的核心。为了确保内容的专业性和准确性&#xff0c;公文校对和文字处理技术的进步成为了不可或缺的关键。本文将深入探讨自然语言处理技术如何为公文校对和文字…

卷轴模式:适用于多种电商场景的商业营销模式

当绿色消费成为行业趋势&#xff0c;合理消费成为人们的共识时&#xff0c;电商平台应该如何发展&#xff1f;如何创新&#xff1f;如何走得更远&#xff1f; 随着电商行业的变化&#xff0c;新时代的到来必然会产生新的模式&#xff0c;人们的消费观念不断变化。近年来&#…

VBA命令及语法列表之在代码:在字符串中添加新行

【分享成果&#xff0c;随喜正能量】烦恼本无根&#xff0c;不捡自然无。外面没有别人&#xff0c;只有你自己&#xff0c;一切烦恼都源于内耗。与其在内耗中耗费时间&#xff0c;不如用行动来提升自我&#xff0c;成就强大的人生。。 我给VBA下的定义&#xff1a;VBA是个人小…

机器学习实战之模型的解释性:Scikit-Learn的SHAP和LIME库

概要 机器学习模型的“黑箱”困境 机器学习模型的崛起让我们惊叹不已&#xff01;不论是预测房价、识别图片中的猫狗&#xff0c;还是推荐给你喜欢的音乐&#xff0c;这些模型都表现得非常出色。但是&#xff0c;有没有想过&#xff0c;这些模型到底是如何做出这些决策的呢&a…

跨境独立站引流怎么做?必看的高转化教学

熟悉跨境外贸的小伙伴应该清楚&#xff0c;不同于国内消费者习惯于在购物平台消费&#xff0c;国外买家大多喜欢登录品牌独立网站(独立站)进行购物。这也是许多跨境小伙伴入局独立站的原因之一。 但是&#xff0c;即使你拥有一个精美的网站&#xff0c;如果没有足够的流量它也…

CRUD啥也不会的高狗剩

xml resultType MyBatis查询结果resultType返回值类型详细介绍_留兰香丶的博客-CSDN博客 Mapper Service List<Map<String,String>>遍历方法 List&#xff1c;Map&#xff1c;String, String&#xff1e;&#xff1e;遍历的方法_list<map<string,string&…

分班查询工具,快速查询学生分班情况

学校的分班和分组工作对于学生来说非常重要。它有助于促进学生之间的交流和合作&#xff0c;提高他们的学习效果。通过分班和分组&#xff0c;学校可以根据学生的兴趣、能力和性格等因素&#xff0c;将他们合理地安排到不同的班级和小组中。 这样一来&#xff0c;学生们可以与志…

Netty-01-快速掌握Java NIO

文章目录 一、从传统I/O到Java NIO二、NIO 三大组件1. Channel&#xff08;通道&#xff09;1.1. FileChannel1.1.1. 获取 FileChannel1.1.2. FileChannel 读取 文件1.1.3. FileChannel写⽂件1.1.4. 通道之前传输数据-transferFrom1.1.5. 通道之前传输数据-transferTo 1.2. Soc…

MQTT Windows 安装及开机自启

一&#xff1a;搭建服务 下载地址&#xff1a; https://www.emqx.io/zh/downloads?osWindows 使用指南&#xff1a; https://www.emqx.io/docs/zh/v5.1/getting-started/getting-started.html#%E5%90%AF%E5%8A%A8-emqx 下载解压&#xff1a; 以管理员打开CMD&#xff0c;进…

c语言练习题28:杨氏矩阵

杨氏矩阵 从左到右增加 从上到下增加 思路&#xff1a; 代码&#xff1a; #include<stdio.h> int findNum(int(*arr)[3], int x, int y, int k) {int i 0;int j y - 1;while (i<x&&j>0) {if (arr[i][j] > k) {j--;}else if (arr[i][j] < k) {i;…