爬虫基础之爬取歌曲宝歌曲批量下载
声明:本案列仅供学习交流使用 任何用于非法用途均与本作者无关
需求分析:
- 网站:邓紫棋-mp3在线免费下载-歌曲宝-找歌就用歌曲宝-MP3音乐高品质在线免费下载 (gequbao.com)
- 爬取 歌曲名 歌曲 实现歌手名称下载所有歌曲
| requests (发送HTTP请求) | re(用于正则表达式匹配和处理) |
| parsel (解析HTML或XML文档) | os (用于与操作系统进行交互,如文件和目录操作) |
监听数据包:
- 打开开发者工具 F12 or 右击点击检查 点击网络
- 点击下一页 或者往下滑
- Ctrl+F 快捷键打开搜索框 输入想要爬取的数据


分析:
通过此界面拿到所有歌曲的内页
然后点进去分析详情页的数据
点击播放按钮 监听数据包 复制下图的URL 地址到浏览器中打开

发现就会下载这个音乐文件
接着点击下载歌曲里面的下载高品质MP3

找到这个请求的数据包 后续发送请求 通过正则可以将下载链接提取出来
好的 分析完毕 我们开始写代码
老样子 右击复制 cURL(bash) 打开我们的爬虫工具
爬虫工具库-spidertools.cn 
复制代码到本地Py文件
以下是实现一首歌曲的采集
发现是根据每首歌的id 来下载的歌曲 因此我们需要拿到所有下载歌曲的id
在每首歌曲的详情页
# 导包
import re
import requestsheaders = {"accept": "application/json, text/javascript, */*; q=0.01","accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6","content-type": "application/x-www-form-urlencoded; charset=UTF-8","origin": "https://www.gequbao.com","priority": "u=1, i","referer": "https://www.gequbao.com/music/9653","sec-ch-ua": "\"Chromium\";v=\"128\", \"Not;A=Brand\";v=\"24\", \"Microsoft Edge\";v=\"128\"","sec-ch-ua-mobile": "?0","sec-ch-ua-platform": "\"Windows\"","sec-fetch-dest": "empty","sec-fetch-mode": "cors","sec-fetch-site": "same-origin","user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0","x-requested-with": "XMLHttpRequest"
}
cookies = {"Hm_lvt_c2b69091f94cb4368f25c28fc7c2d28c": "1736209777,1736210463","HMACCOUNT": "0EB52C16E9A34AE0","Hm_lpvt_c2b69091f94cb4368f25c28fc7c2d28c": "1736210603"
}
url = "https://www.gequbao.com/api/play-url"
data = {"id": "SF9bVDxXUl1RQ1heUHJe"
}
response = requests.post(url, headers=headers, cookies=cookies, data=data)
# 通过re正则提取 下载的url地址
down_url = ''.join(re.findall(r'"url":"(.*?)"',response.text)[0]).replace('\\','')
# 保存数据 歌曲 图片 视频 保存均为二进制的格式
content = requests.get(url=down_url, headers=headers, cookies=cookies, data=data).content
# 以二进制的形式 进行写入保存
with open('1.mp3','wb') as f:f.write(content)
接着我们拿到所有歌曲的内页链接 里面包含歌曲的id
# 发送请求
first_url = 'https://www.gequbao.com/s/%E9%82%93%E7%B4%AB%E6%A3%8B'
# 后面的参数 其实就是邓紫棋
result= requests.get(url=first_url,headers=headers,cookies=cookies,data=data)
print(result.text)
从返回的数据中搜索是否存在我们想要的数据

提取数据 打开元素面板 查看元素所在的位置

select = parsel.Selector(result.text)
lis = select.css('.row .col-8.col-content')
for li in lis:in_id = li.css('a::attr(href)').get().split('/')[-1]
![]()
接着我们构造URL 对详情页发送请求
url = f'https://www.gequbao.com/music/{in_id}'
从返回的数据中通过正则提取我们想要的数据 id
resp = requests.get(url, headers=headers)# print(resp.text)# 歌曲idplay_id = re.findall(r"window.play_id = '(.*?)';", resp.text)[0]# 歌曲名字play_title = re.findall(r"window.mp3_title = '(.*?)';", resp.text)[0]# 歌手play_author = re.findall(r"window.mp3_author = '(.*?)';", resp.text)[0]# 因为正则提取出来的是列表 对列表进行取值
最后 还记得开始下载一首歌曲的请求嘛 对此发送请求
将我们从每首歌的详情页获取到的play_id 传进去
完整的代码如下
import requests
import re
import parsel
import osinp = input('请输入要采集的歌手:')
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0'
}first_url = f'https://www.gequbao.com/s/{inp}'
# .row .col-8.col-content a
result = requests.get(url=first_url,headers=headers)
select = parsel.Selector(result.text)
lis = select.css('.row .col-8.col-content')
for li in lis:in_id = li.css('a::attr(href)').get().split('/')[-1]# print(in_id)# 以上代码拿到id# 构建详情页链接url = f'https://www.gequbao.com/music/{in_id}'resp = requests.get(url, headers=headers)# print(resp.text)play_id = re.findall(r"window.play_id = '(.*?)';", resp.text)[0]play_title = re.findall(r"window.mp3_title = '(.*?)';", resp.text)[0]play_author = re.findall(r"window.mp3_author = '(.*?)';", resp.text)[0]# print(play_id,play_title,play_author)# 下载歌曲的链接 需要传入每个歌曲的idlink = 'https://www.gequbao.com/api/play-url'data = {'id': play_id}response = requests.post(url=link, data=data, headers=headers)json_data = response.json()# 获取json数据# 提取下载链接play_url = json_data['data']['url']
最后我们根据不同歌手来保存数据
需要导入os 模块
# 获取二进制数据 content = requests.get(play_url, headers=headers).content# 定义文件目录filed_name=f'music\\{play_author}\\'# 自动创建 文件夹if not os.path.exists(filed_name):os.makedirs(filed_name) # 以二进制的数据写入保存with open(f'{filed_name}' + play_author + play_title + '.mp3', 'wb') as f:f.write(content)print(f'正在采集{play_author}{play_title}歌曲')
以下是本次案例的所有代码 仅供学习参考使用
import requests
import re
import parsel
import osinp = input('请输入要采集的歌手:')
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0'
}first_url = f'https://www.gequbao.com/s/{inp}'
# .row .col-8.col-content a
result = requests.get(url=first_url,headers=headers)
select = parsel.Selector(result.text)
lis = select.css('.row .col-8.col-content')
for li in lis:in_id = li.css('a::attr(href)').get().split('/')[-1]# print(in_id)# 以上代码拿到idurl = f'https://www.gequbao.com/music/{in_id}'resp = requests.get(url, headers=headers)# print(resp.text)play_id = re.findall(r"window.play_id = '(.*?)';", resp.text)[0]play_title = re.findall(r"window.mp3_title = '(.*?)';", resp.text)[0]play_author = re.findall(r"window.mp3_author = '(.*?)';", resp.text)[0]# print(play_id,play_title,play_author)link = 'https://www.gequbao.com/api/play-url'data = {'id': play_id}response = requests.post(url=link, data=data, headers=headers)json_data = response.json()play_url = json_data['data']['url']content = requests.get(play_url, headers=headers).contentfiled_name=f'music\\{play_author}\\'if not os.path.exists(filed_name):os.makedirs(filed_name)with open(f'{filed_name}' + play_author + play_title + '.mp3', 'wb') as f:f.write(content)print(f'正在采集{play_author}{play_title}歌曲')
运行代码

本次的案例分享就到此结束啦 感谢大家的观看 您的点赞和关注是我更新的动力
相关文章:
爬虫基础之爬取歌曲宝歌曲批量下载
声明:本案列仅供学习交流使用 任何用于非法用途均与本作者无关 需求分析: 网站:邓紫棋-mp3在线免费下载-歌曲宝-找歌就用歌曲宝-MP3音乐高品质在线免费下载 (gequbao.com) 爬取 歌曲名 歌曲 实现歌手名称下载所有歌曲 本案列所使用的模块 requests (发送…...
GitLab CI/CD使用runner实现自动化部署前端Vue2 后端.Net 7 Zr.Admin项目
1、查看gitlab版本 建议安装的runner版本和gitlab保持一致 2、查找runner 执行 yum list gitlab-runner --showduplicates | sort -r 找到符合gitlab版本的runner,我这里选择 14.9.1版本 如果执行出现找不到下载源,添加官方仓库 执行 curl -L &quo…...
web前端第五次作业---制作菜单
制作菜单 代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style…...
软件系统安全逆向分析-混淆对抗
1. 概述 在一般的软件中,我们逆向分析时候通常都不能直接看到软件的明文源代码,或多或少存在着混淆对抗的操作。下面,我会实践操作一个例子从无从下手到攻破目标。 花指令对抗虚函数表RC4 2. 实战-donntyousee 题目载体为具有漏洞的小型软…...
HAMi + prometheus-k8s + grafana实现vgpu虚拟化监控
最近长沙跑了半个多月,跟甲方客户对了下项目指标,许久没更新 回来后继续研究如何实现 grafana实现HAMi vgpu虚拟化监控,毕竟合同里写了需要体现gpu资源限制和算力共享以及体现算力卡资源共享监控 先说下为啥要用HAMi吧, 一个重要原…...
Java基于SSM框架的在线视频教育系统小程序【附源码、文档】
博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇dz…...
mysql本地安装和pycharm链接数据库操作
MySQL本地安装和相关操作 Python相关:基础、函数、数据类型、面向、模块。 前端开发:HTML、CSS、JavaScript、jQuery。【静态页面】 Java前端; Python前端; Go前端 -> 【动态页面】直观: 静态,写死了…...
Unity编程与游戏开发-编程与游戏开发的关系
游戏开发是一个复杂的多领域合作过程,涵盖了从创意构思到最终实现的多个方面。在这个过程中,技术、设计与美术三大核心要素相互交织,缺一不可。在游戏开发的过程中,Unity作为一款强大的跨平台游戏引擎,凭借其高效的开发工具和庞大的社区支持,成为了很多游戏开发者的首选工…...
2025年第三届“华数杯”国际赛A题解题思路与代码(Python版)
游泳竞技策略优化模型代码详解 第一题:速度优化模型 在这一部分,我们将详细解析如何通过数学建模来优化游泳运动员在不同距离比赛中的速度分配策略。 1. 模型概述 我们的模型主要包含三个核心文件: speed_optimization.py: 速度优化的核…...
针对服务器磁盘爆满,MySql数据库始终无法启动,怎么解决
(点击即可进入聊天助手) 很多站长在运营网站的过程当中都会遇到一个问题,就是网站突然无法打开,数据一直无法启动 无论是强制重启还是,删除网站内的所有应用,数据库一直无法启动 这个时候,就需要常见的运维手段了,需要对服务器后台各个资源,进行逐一排查…...
[Android]service命令的使用
在前面的讨论中,我们说到,如果在客户端懒得使用aidl文件生成的接口类进行binder,可以使用IBinder的transcat方法 Parcel dataParcel = Parcel.obtain(); Parcel resultParcel = Parcel.obtain();dataParcel.writeInterfaceToken(DESCRIPTOR);//发起请求 aProxyBinder.trans…...
【芯片封测学习专栏 -- Substrate | RDL Interposer | Si Interposer | 嵌入式硅桥(EMIB)详细介绍】
请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】 文章目录 OverviewSubstrate(衬底或基板)Substrate 定义Substrate 特点与作用Substrate 实例 RDL Interposer(重布线层中介层&a…...
spring cloud注册nacos并从nacos上拉取配置文件,spring cloud不会自动读取bootstrap.yml文件
目录 踩坑问题记录前言版本说明spring cloudb不会自动读取bootstrap.yml文件问题解决spring cloud注册nacos并从nacos上拉取配置文件后话 踩坑问题记录 1、spring cloudb不会自动读取bootstrap.yml文件 2、spring cloud注册nacos并从nacos上拉取配置文件 前言 使用cloud Ali…...
【深度学习地学应用|滑坡制图、变化检测、多目标域适应、感知学习、深度学习】跨域大尺度遥感影像滑坡制图方法:基于原型引导的领域感知渐进表示学习(一)
【深度学习地学应用|滑坡制图、变化检测、多目标域适应、感知学习、深度学习】跨域大尺度遥感影像滑坡制图方法:基于原型引导的领域感知渐进表示学习(一) 【深度学习地学应用|滑坡制图、变化检测、多目标域适应、感知学习、深度学习】跨域大…...
Spring Boot 支持哪些日志框架
Spring Boot 支持多种日志框架,主要包括以下几种: SLF4J (Simple Logging Facade for Java) Logback(默认)Log4j 2Java Util Logging (JUL) 其中,Spring Boot 默认使用 SLF4J 和 Logback 作为日志框架。如果你需要使…...
【翻译】2025年华数杯国际赛数学建模题目+翻译pdf自取
保存至本地网盘 链接:https://pan.quark.cn/s/f82a1fa7ed87 提取码:6UUw 2025年“华数杯”国际大学生数学建模竞赛比赛时间于2025年1月11日(周六)06:00开始,至1月15日(周三)09:00结束ÿ…...
qt 窗口(window/widget)绘制/渲染顺序 QPainter QPaintDevice Qpainter渲染 失效 无效 原因
qt窗体布局 窗体渲染过程 qt中窗体渲染逻辑顺序为 本窗体->子窗体/控件 递归,也就是说先渲染父窗体再渲染子窗体。其中子窗体按加入时的先后顺序进行渲染。通过下方的函数调用堆栈可以看出窗体都是在widget组件源码的widgetprivate::drawwidget中进行渲染的&am…...
TIOBE编程语言排行靠前的编程语言的吉祥物
Python的吉祥物:小蟒蛇 Python语言的吉祥物是一只名叫"Pythonidae"(或简称"Py")的小蟒蛇。这个吉祥物由Tobias Kohn设计于2005年,它的形象借鉴了真实的蟒蛇,但加入了一些可爱和友善的特点。小蟒蛇…...
【前端动效】HTML + CSS 实现打字机效果
目录 1. 效果展示 2. 思路分析 2.1 难点 2.2 实现思路 3. 代码实现 3.1 html部分 3.2 css部分 3.3 完整代码 4. 总结 1. 效果展示 如图所示,这次带来的是一个有趣的“擦除”效果,也可以叫做打字机效果,其中一段文本从左到右逐渐从…...
大疆上云API连接遥控器和无人机
文章目录 1、部署大疆上云API关于如何连接我们自己部署的上云API2、开启无人机和遥控器并连接自己部署的上云API如果遥控器和无人机没有对频的情况下即只有遥控器没有无人机的情况下如果遥控器和无人机已经对频好了的情况下 4、订阅无人机或遥控器的主题信息4.1、订阅无人机实时…...
Windows平台Datax部署与初体验:从零到一的数据同步实战
1. Windows平台Datax部署全攻略 第一次在Windows上折腾Datax的经历我还记得很清楚,当时为了同步几个简单的数据表,硬是折腾了大半天。现在回头看,其实只要掌握几个关键步骤,半小时就能搞定。Datax作为阿里开源的数据同步工具&…...
Java编程避坑指南:九大类常见陷阱与解决方案,助你写出高质量代码
文章目录 基础类 类、继承与内存 继承特性与注意事项 内存管理 现代 Java 特性 记录类与密封类常见陷阱 集合与遍历 相等性约定 集合常见陷阱 并发与同步 并发 异常处理 泛型与类型擦除 泛型陷阱 泛型与类型擦除 泛型陷阱 JVM、垃圾回收与模块系统 JVM/GC 常见陷阱 模块系统(J…...
YimMenu:GTA V体验增强工具的全方位应用指南
YimMenu:GTA V体验增强工具的全方位应用指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu …...
G-Helper完整指南:三步掌握华硕笔记本性能优化神器
G-Helper完整指南:三步掌握华硕笔记本性能优化神器 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar,…...
Windows 10/11下Frida逆向分析环境搭建避坑指南(含ADB驱动安装)
Windows 10/11逆向工程实战:Frida环境搭建全流程与疑难解析 逆向工程的世界就像一场数字考古,而Frida无疑是当前最趁手的工具之一。但很多新手在Windows平台搭建Frida环境时,往往会陷入Python版本地狱、ADB驱动失效、设备连接失败等连环陷阱。…...
无人机新手必看:Remote ID和ADS-B到底选哪个?从原理到实战全解析
无人机新手必看:Remote ID和ADS-B到底选哪个?从原理到实战全解析 刚入手的无人机在阳光下闪着金属光泽,充电时发出的细微电流声让人心跳加速——直到你发现说明书最后一页印着"需遵守Remote ID或ADS-B监管要求"。这两个陌生术语瞬…...
降AI率工具哪个好用知网维普万方分开对比
很多同学只关心"知网通没通过",但2026年越来越多学校开始同时要求知网和维普双重检测,部分学校还加了万方。 问题在于:一款工具在知网效果好,不代表在维普和万方也同样好。这是因为三个平台的AIGC检测算法不同。 这篇…...
革新性突破:Mac百度网盘下载速度解放方案
革新性突破:Mac百度网盘下载速度解放方案 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS BaiduNetdiskPlugin-macOS是一款专为Mac用户设计的…...
FanControl完全攻略:智能风扇控制的动态平衡技术与多场景应用
FanControl完全攻略:智能风扇控制的动态平衡技术与多场景应用 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…...
用STM32F4做个PWM信号发生器:按键调参+OLED显示,示波器实测验证
用STM32F4打造高精度PWM信号发生器:从原理到实战 在电子开发与测试中,PWM信号发生器是不可或缺的工具。专业信号源价格昂贵,而基于STM32F4的开发板却能以极低成本实现类似功能。本文将带你从零构建一个带OLED显示和按键控制的PWM信号发生器&…...
