Python实现歌曲下载程序, 打包exe应用程序

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取

环境使用:

  • Python 3.10

  • Pycharm

模块使用:

  • import requests >>> pip install requests

  • import parsel >>> pip install parsel

  • import prettytable >>> pip install prettytable

  • import os

打包exe程序: pyinstaller -> pip install pyinstaller

爬虫基本实现流程

一. 数据来源分析

  1. 明确需求

    明确采集的网站以及数据内容 (实现什么样程序)

    程序功能: 通过关键字(歌手/歌名) 进行歌曲搜索, 然后进行对应歌曲内容下载

    • 网址: https://www.gequbao.com/

    • 数据: 歌曲内容 / 歌曲标题

  2. 抓包分析 (浏览器中进行的操作)

    抓包分析: 分析我们需要的数据, 可以请求那个网址能够得到

    分析操作: 通过浏览器自带开发者工具

    先分析歌曲链接地址 -> 歌曲链接地址从哪里的生成 -> 如何才能实现搜索对应下载功能

    • 打开开发者工具: F12

      https://www.gequbao.com/music/402856 在网页页面打开开发者工具

    • 刷新网页: 让数据内容重新加载一遍

    • 快速找到对应歌曲播放地址

      https://sy-sycdn.kuwo.cn/af5833d0735b1bba1f86d4ef6c3888d7/65d72918/resource/n
      2/70/55/756351052.mp3?from=vip

    • 通过关键字搜索找到对应数据包位置

      爬虫: 批量数据采集

      继续分析, 音频链接在那个数据包当中是存在的

      关键字: 使用音频链接当中一段参数即可

      https://sy-sycdn.kuwo.cn/af5833d0735b1bba1f86d4ef6c3888d7/65d72918/resource/n
      2/70/55/756351052.mp3?from=vip

      比如: 756351052 作为关键字进行搜索

    晴天数据包地址: https://www.gequbao.com/api/play_url?id=402856&json=1

    阴天数据包地址: https://www.gequbao.com/api/play_url?id=61045&json=1

    对比分析: id=xxxx (歌曲ID)

    • 晴天ID 402856

    • 阴天ID 61045

    只要获取到歌曲ID就可以下载对应歌曲内容

    • 分析歌曲ID可以请求那个链接获得

      搜索链接地址: https://www.gequbao.com/s/%E9%98%B4%E5%A4%A9

      • 歌手 / 歌名 / 音乐ID

    目的: 根据搜索关键字下载对应歌曲

    1. 歌曲 -> 专门数据包链接 阴天数据包地址: https://www.gequbao.com/api/play_url?id=xxx&j
      son=1

    2. 获取对应歌曲ID -> https://www.gequbao.com/s/搜索关键字

二. 代码实现步骤 (基本四个步骤)

导入的模块

'''
Python学习交流,免费公开课,免费资料,
免费答疑,系统学习加QQ群:926207505
'''
# 导入数据请求模块 (需要安装 pip install requests)
import requests
# 导入数据解析模块 (需要安装 pip install parsel)
import parsel
# 导入制表模块 (需要安装 pip install prettytable)
from prettytable import PrettyTable
# 导入文件操作模块 (无需安装 内置模块)
import os

1. 发送请求

模拟浏览器对于url地址发送请求

while True:
    """发送请求
    - 模拟浏览器对于url地址发送请求
    """
    # 模拟浏览器
    headers = {
        # User-Agent 用户代理, 表示浏览器基本身份信息
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36'
    }
    # 输入搜索
    key = input('请输入你要下载歌曲(00退出): ')
    if key == '00':
        break
    # 请求网址: 搜索链接地址
    search = f'https://www.gequbao.com/s/{key}'
    # 发送请求
    response = requests.get(url=search, headers=headers)

2. 获取数据

获取服务器返回响应数据

    # 获取数据: 获取服务器返回响应数据
    html = response.text

3. 解析数据

提取我们需要的数据内容

解析方法: 本案例前三个都能用

  • re正则: 对于字符串数据进行提取 字符串数据即可

  • css选择器: 根据标签属性提取数据内容 需要是有标签格式 (√)

  • xpath: 根据标签节点提取数据 需要是有标签格式

  • json数据解析: 一般情况字典取值 (必须json数据格式)

'''
Python学习交流,免费公开课,免费资料,
免费答疑,系统学习加QQ群:926207505
'''
    """解析数据: 提取我们需要的数据内容"""
    # 1. 把获取到html字符串数据, 转成可解析对象
    selector = parsel.Selector(html)
    # 2. 根据标签数据, 提取相关内容 41条数据(第一条和最后一天不是我们需要)
    rows = selector.css('.row')[1:-1]
    # 实例化对象
    tb = PrettyTable()
    # 设置字段名
    tb.field_names = ['序号', '歌手', '歌名']
    # 自定义变量序号
    num = 0
    # 创建空列表
    info = []
    # for循环遍历, 提取列表里面元素
    for row in rows:
        # 3. 进行具体数据解析
        title = row.css('.text-primary::text').get().strip() # 歌名
        music_id = row.css('.text-primary::attr(href)').get().split('/')[-1] # ID
        name = row.css('.text-success::text').get().strip() # 歌手
        dit = {
            '歌手': name,
            '歌名': title,
            'ID': music_id,
        }
        # 添加字典到列表中
        info.append(dit)
        # 添加字段内容
        tb.add_row([num, name, title])
        num += 1


    print(tb)
    key_num = input('请输入你要下载歌曲序号: ')
    # 获取歌曲ID -> 传入到歌曲数据包中即可
    # 请求网址: 歌曲对应数据包链接
    link = f'https://www.gequbao.com/api/play_url?id={info[int(key_num)]["ID"]}&json=1'
    # 发送请求 + 获取响应数据
    json_data = requests.get(url=link, headers=headers).json()
    # 解析数据, 提取歌曲链接
    music_url = json_data['data']['url']

4. 保存数据

把数据内容保存本地文件夹 / 数据库 …

    """保存数据"""
    music_content = requests.get(url=music_url, headers=headers).content
    # 自动创建文件夹
    if not os.path.exists('music'): # 判断如果没有文件夹
        # 自动创建文件夹
        os.mkdir('music')
    song_name = info[int(key_num)]["歌名"]
    with open(file=f'music\\{song_name}.mp3', mode='wb') as f:
        # 保存歌曲内容
        f.write(music_content)

    print(song_name, '保存成功!')

如果文章看不懂,我还准备了视频教程,同样文末名片获取噢~

尾语

最后感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉,有学习到一点知识~

躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion 模型分享:Dark Sushi Mix 大颗寿司Mix

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十

Rust: reqwest库示例

一、异步处理单任务 1、cargo.toml [dependencies] tokio { version "1.0.0", features ["full", "tracing"] } tokio-util { version "0.7.0", features ["full"] } tokio-stream { version "0.1" }…

前端工程Bem架构及其封装

文章目录 简介语法在vue3项目中引用sass创建bem.scss文件修改vite.config.tsvue文件中使用结果 这是我学习记录的笔记,如有不正,欢迎补充 简介 首先认识一下什么是bem架构?BEM的意思就是块(block)、元素(e…

操作系统--调度算法

一、进程调度算法(CPU调度算法) 什么时候会发生 CPU 调度呢?通常有以下四种情况: 「抢占式调度」:进程正在运行的时,可以被打断,使其把 CPU 让给其他进程。那抢占的原则一般有三种&#xff0c…

【网络编程】okhttp深入理解

newCall 实际上是创建了一个 RealCall 有三个参数:OkHttpClient(通用配置,超时时间等) Request(Http请求所用到的条件,url等) 布尔变量forWebSocket(webSocket是一种应用层的交互方式,可双向交互…

符尧大佬一作发文,仅改训练数据,就让LLaMa-2上下文长度扩展20倍!

引言:探索语言模型的长上下文能力 近日,谷歌推出了Gemini Pro 1.5,将上下文窗口长度扩展到100万个tokens,目前领先世界。而其他语言模型也正在不断探索长上下文能力,也就是模型处理和理解超出其训练时所见上下文长度的…

基于飞凌嵌入式RK3568核心板的边缘计算门禁屏解决方案

边缘计算作为一种将计算任务从云端推向网络边缘的新型计算模式,正日益受到各行各业的青睐,并已在我们的生产和生活当中得到了广泛的应用,其中“门禁系统”就是最常见的与边缘计算相结合的应用之一。 传统的门禁系统受限于数据处理能力和网络…

2023年的AI模型学习/部署/优化

可以的话,github上给点一个小心心,感谢观看。 LDC边缘检测的轻量级密集卷积神经网络: meiqisheng/LDC (github.com)https://github.com/meiqisheng/LDC segment-anything分割一切的图像分割算法模型: meiqisheng/segment-anyt…

新手学习Cesium的几点建议

Cesium是当前非常火热的三维数字地球开发框架,很多公司基于Cesium做项目以及形成了自己的产品,关于Cesium的学习,有诸多网站、书籍、学习资料甚至培训教材,这里不再详细推荐,从学习Cesium的角度,资料和教程…

精美的WordPress外贸独立站模板

WordPress外贸独立站主题 简洁实用的WordPress外贸独立站主题,适合时尚服装行业搭建wordpress企业官网使用。 https://www.jianzhanpress.com/?p4999 简洁wordpress独立站模板 绿色精美、简洁大气的wordpress外贸独立网站模板 https://www.jianzhanpress.com/?…

NXP实战笔记(六):S32K3xx基于RTD-SDK在S32DS上配置PWM发波

目录 1、概述 2、SDK配置 2.1、Port配置 2.2、Emios_Mcl_Ip 2.3、Emios_Pwm 2.4、代码示例 1、概述 针对S32K3xx芯片,产生PWM的硬件支持单元仅有两个,分别是eMiosx与Flexio. 生成PWM的顺序,按照单片机所用资源进行初始化执行如下 初始化…

微软推出Windows照片编辑新功能:AI魔术橡皮擦生成擦除工具让照片修图更轻松

微软宣布推出生成擦除功能,该功能让用户在 Windows 捆绑的照片应用程序中使用人工智能技术对照片进行修改。这一功能类似于谷歌和三星设备上的 AI 选择性照片橡皮擦,让用户可以轻松消除照片中的不需要的元素,如狗的皮带或意外出现的人物。不仅…

数据可视化在商业领域有哪些重要性?

数据可视化在商业领域的重要性体现在多个方面,它通过将复杂的数据集转化为直观、易于理解的图形和图表,帮助企业和组织做出更明智的决策。以下是数据可视化对商业的一些关键重要性: 提高决策效率:通过直观的图表和图形&#xff0c…

如何把电脑上的png图片变为jpg?图片格式在线转化的方法

由于jpg文件比较小,把png格式转换后更适合我们的保存和使用,尤其是对于一些平台上传来说,很多地方都要求图片格式为jpg,为了能更顺利的上传,本文就叫大家一个图片格式转换的方法,使用压缩图网站&#xff0c…

STM32Cubemx TB6612直流电机驱动

一、TB6612FNG TB6612是一个支持双电机的驱动模块,支持PWM调速。PWMA、AIN1、AIN2 为一组控制引脚,PWMA 为 PWM 速度控制引脚,AIN1、AIN2 为方向控制引脚;PWMB、BIN1、BIN2 为一组控制引脚,PWMB 为 PWM 速度控制引脚&…

Fpga_高斯滤波

一 算法原理 高斯滤波即将图像频域处理和时域处理相联系,作为低通滤波器使用,滤去低频能量,平滑图像,适用于消除高斯噪声,应用于图像降噪领域。 高斯滤波是对图像像素点进行加权平均的过程,某一像素点的值…

Unity编辑器内工程文件重命名|Project视图文件名修改

Unity编辑器内文件重命名 前言大项内容一使用方法代码展示 总结 前言 本文代码可以一键更改Project视图的文件名字 在当前文件名的状态下增加一段字符区分文件。 大项内容一 功能是因为在给其他人导入项目资源时有重复的资源的时候,资源会产生覆盖的问题。所以直…

Neo4j导入数据之JAVA JDBC

目录结构 前言设置neo4j外部访问代码整理maven 依赖java 代码 参考链接 前言 公司需要获取neo4j数据库内容进行数据筛查,neo4j数据库咱也是头一次基础,辛辛苦苦安装好整理了安装neo4j的步骤,如今又遇到数据不知道怎么创建,关关难…

C语言第二十九弹---浮点数在内存中的存储

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 目录 1、浮点数在内存中的存储 1.1、练习 1.2、浮点数怎么转化为二进制 1.3、浮点数的存储 1.3.1、浮点数存的过程 1.3.2、浮点数取的过程 1.3、题目解析…

vue 动态渲染本地图片不显示的解决方法

代码更改前 <img class"img" :src"/assets/images/${syntheticalGrade}.png" />data(){return{syntheticalGrade:"1"} }效果图&#xff1a; 解决代码 <img class"img" :src"require(/assets/images/${syntheticalGrad…