Python简单网抑云数据采集 JS逆向

嗨喽,大家好呀~这里是爱看美女的茜茜呐

环境使用:

  • Python 3.10

  • Pycharm

模块使用:

  • requests -> pip install requests

  • execjs -> pip install execjs

爬虫实现基本思路流程:

一. 数据来源分析:
  1. 明确需求: 明确采集的网站以及数据内容

    • 网址: https://music.163.com/#/discover/toplist?id=3779629

    • 数据: 歌曲内容

  2. 抓包分析: 分析歌曲播放链接地址是那个, 怎么获得

    • 打开开发者工具: F12 / 右键点击检查选择network (网络)

    • 点击播放歌曲

    • 找到音乐播放链接地址: (选择媒体文件 media)
      播放链接: https://m704.music.126.net/20231209203449/814a6a477dc83f8002fa2a08b16f38ba/jdyyaac/obj/w5rDlsOJwrLDjj7CmsOj/31966535088/1b87/d918/e5fe/cc565b1103eadc6fd1a967372bfe9420.m4a?authSecret=0000018c4e7bde2719dd0aaba0891864

    • 继续分析, 播放链接是从哪来生成: (通过关键字去搜)

    请求方式: post

    请求头参数: 无加密

    请求参数: 表单数据 (加密数据)
    params: √
    encSecKey: √

    通过JS代码断点调试: 跟栈方法

    var bVg1x = window.asrsea(JSON.stringify(i4m), bsk6e([“流泪”, “强”]), bsk6e(WH4L.md), bsk6e([“爱心”, “女孩”, “惊恐”, “大笑”]));

    nodejs 环境 (和你python安装在同一个位置)

二. 代码实现步骤:
  1. 发送请求 -> 模拟浏览器对于url地址发送请求

  2. 获取数据 -> 获取服务器返回响应数据

  3. 解析数据 -> 提取我们需要的内容

  4. 保存数据 -> 保存歌曲数据到本地文件夹

代码展示

导入模块

# 导入编译js代码模块
import execjs
# 导入数据请求模块
import requests
# 导入正则表达式模块
import re

模拟浏览器

headers = {
    'Origin': '****',
    'Referer': '****/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36',
}

请求网址

link = '****/discover/toplist?id=3778678'

发送请求

html_data = requests.get(url=link, headers=headers).text

提取id 和 歌名

info = re.findall('<a href="/song\?id=(\d+)">(.*?)</a>', html_data)
print(len(info))
num = 1
for music_id, title in info:
    print(num, music_id, title)
    num += 1

请求网址

    url = '****m/weapi/song/enhance/player/url/v1?csrf_token='

“”"
构建请求参数
“”"

读取js代码

    f = open('网易云.js', encoding='utf-8').read()

编译js代码

    js_code = execjs.compile(f)

调用JS代码函数

    i4m = {
        "ids": f"[{music_id}]",
        "level": "standard",
        "encodeType": "aac",
        "csrf_token": ""
    }
    res = js_code.call('post_data', i4m)
    data = {
        'params': res['encText'],
        'encSecKey': res['encSecKey']
    }

发送请求

    response = requests.post(url=url, data=data, headers=headers)

获取响应数据

    json_data = response.json()

解析数据, 键值对取值

    music_url = json_data['data'][0]['url']

保存数据

    content = requests.get(url=music_url, headers=headers).content
    with open('music热歌\\' + title + '.mp3', mode='wb') as f:
        f.write(content)
    print(music_url)

尾语

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

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

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

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

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

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

相关文章

【java】java类/方法冲突解决工具

目录下查找包含特定名称&#xff08;如&#xff1a;类名称&#xff09;的Jar包 上代码&#xff1a; 比如要查找含有类 “org/apache/avro/Schema” 的&#xff1a; # 方法一 # 此方法只能查找到内容&#xff08;比如&#xff1a;类名称&#xff09;。但是不能打印jar名称 fi…

大数据Vue项目必备|Window下安装并使用nvm(含卸载node、卸载nvm、全局安装npm)

大数据Vue项目必备|Window下安装并使用nvm&#xff08;含卸载node、卸载nvm、全局安装npm&#xff09; 一、卸载旧版本 如果已经安装了node&#xff0c;那么需要先卸载node&#xff0c;如果没有安装那可以直接跳过这一步。 卸载&#xff1a;   打开控制面板 -> 打开程序和…

2个实用的快速涨粉视频号数据分析平台

很多人在做视频号的视频总不知道怎么利用视频号进行数据分析以及如何涨粉&#xff1f;今天就说两个视频号数据分析平台 可以查询各项爆款数据&#xff0c;什么账号大火、什么领域热大家都在关心什么快速了解。 1&#xff1a;视频号助手&#xff08;https://channels.weixin.q…

一文了解什么是Selenium自动化测试?

一、Selenium是什么&#xff1f; 用官网的一句话来讲&#xff1a;Selenium automates browsers. Thats it&#xff01;简单来讲&#xff0c;Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作浏览器一样。支持的浏…

手把手搭建腾讯云服务器教程(新手必看)

使用腾讯云服务器搭建网站全流程&#xff0c;包括轻量应用服务器和云服务器CVM建站教程&#xff0c;轻量可以使用应用镜像一键建站&#xff0c;云服务器CVM可以通过安装宝塔面板的方式来搭建网站&#xff0c;腾讯云服务器网txyfwq.com分享使用腾讯云服务器建站教程&#xff0c;…

社区团购行业分析:未来在门店拓展上还有很大的发展空间

社区团购是真实居住社区内居民团体的一种互联网线上线下购物消费行为&#xff0c;是依托真实社区的一种区域化、小众化、本地化、网络化的团购形式。简而言之&#xff0c;它是依托社区和团长社交关系实现生鲜商品流通的新零售模式。 社区团购&#xff0c;是指一定数量的消费者通…

Android 蓝牙BluetoothAdapter 相关(一)

Android 蓝牙相关 本文主要讲述android 蓝牙的简单使用. 1: 是否支持蓝牙 /*** 是否支持蓝牙** return*/ private boolean isSupportBluetooth() {BluetoothAdapter bluetoothAdapter BluetoothAdapter.getDefaultAdapter();return bluetoothAdapter ! null; }2: 开启蓝牙 …

消息队列kafka详解:Kafka架构介绍

一. 工作流程 Kafka中消息是以topic进行分类的&#xff0c;Producer生产消息&#xff0c;Consumer消费消息&#xff0c;都是面向topic的。 Topic是逻辑上的改变&#xff0c;Partition是物理上的概念&#xff0c;每个Partition对应着一个log文件&#xff0c;该log文件中存储的就…

智能优化算法应用:基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于花授粉算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.花授粉算法4.实验参数设定5.算法结果6.参考文…

C++学习笔记(十一)------has_a和use_a关系

文章目录 前言 一、has_a关系 1.1 has_a概念 1.2 has_a中构造和析构的顺序 1.3 has_a对象的内存情况 二、use_a关系&#xff08;友元关系&#xff09; 1.友元函数&#xff1a; 2.友元类 3 使用多文件编程的方式重新编辑上述代码 总结 前言 随着技术的革新&#xff0c;出现各种各…

信奥赛 1310:【例2.2】车厢重组

本题解析&#xff1a;根据上述的要求&#xff0c;转化为程序的解题方案&#xff0c;就是用到了冒泡排序。本题中求的是旋转次数&#xff0c;实际上就是冒泡排序中交换的次数。 本题考察的知识点是&#xff1a;冒泡排序的用法。 参考代码&#xff1a; 上述代码仅供参考&#xff…

Vue学习计划-Vue2--VueCLi(四)组件传值和自定义事件

1. 组件传值 组件化编码流程&#xff1a; 拆分静态组件&#xff1a;组件要按照功能点拆分&#xff0c;命名不要与html元素冲突实现动态组件&#xff1a;考虑好数据的存放位置&#xff0c;数据是一个组件在用&#xff0c;还是一些组件在用&#xff1a; 一个组件在用&#xff0c…

Git 硬重置之后恢复历史提交版本

****硬重置之前一定要备份分支呀&#xff0c;谨慎使用硬重置&#xff0c;特别是很多人一起使用的分支**** 如果你在reset的时候选择了Hard选项&#xff0c;也就是硬重置 重置完且push过&#xff0c;那么被你本地和远端后面的提交记录肯定就会被抹去。 解决办法&#xff1a; …

TypeScript入门实战笔记 -- 01 如何快速搭建 TypeScript 学习开发环境?

&#x1f34d;IDE for TypeScript 在搭建 TypeScript 环境之前&#xff0c;我们需要先认识几款适合 TypeScript 的 IDE。只有这样&#xff0c;在开发时我们才能根据实际情况选择合适的 IDE 进行安装&#xff0c;从而提升工作效率。 VS Code Visual Studio Code&#xff08;VS C…

Win11专业版,eNSP启动失败,错误代码40 解决方法

微软Win11系统默认开启的 Virtualization-based Security &#xff08;VBS&#xff09;“基于虚拟化的安全性”会导致游戏、跑分性能下降。VBS 基于虚拟化的安全性&#xff0c;通常称为内核隔离。使用硬件虚拟化在内存中创建安全区域&#xff0c;为其他安全功能提供了一个安全平…

parser

"typescript-eslint/parser": "5.56.0", "vue-eslint-parser": "9.1.0", 代码来自ruoyi-plus vue-eslint-parser是一个专门用于解析Vue.js单文件组件&#xff08;.vue文件&#xff09;的ESLint插件。ESLint是一个用于检查和修复Java…

Python接口自动化浅析requests请求封装原理

以下主要介绍如何封装请求 还记得我们之前写的get请求、post请求么&#xff1f; 大家应该有体会&#xff0c;每个请求类型都写成单独的函数&#xff0c;代码复用性不强。 接下来将请求类型都封装起来&#xff0c;自动化用例都可以用这个封装的请求类进行请求 将常用的get、p…

[ESXi 5/6/7/8]设置 ESXi DCUI 欢迎消息

目录 1. ESXi默认设置2. 设置欢迎消息 MOTD2.1 使用GUI设置2.2 使用 ESXCLI 命令设置使用 esxcli 移除欢迎消息 参考资料 配置在 ESXi 直接控制台用户界面 (DCUI) 中显示的欢迎消息&#xff0c;并验证配置是否处于只读模式 Annotations.WelcomeMessage 是ESXi的高级系统设置&am…

Unity中的ShaderToy

文章目录 前言一、ShaderToy网站二、ShaderToy基本框架1、我们可以在ShaderToy网站中&#xff0c;这样看用到的GLSL文档2、void mainImage 是我们的程序入口&#xff0c;类似于片断着色器3、fragColor作为输出变量&#xff0c;为屏幕每一像素的颜色&#xff0c;alpha一般赋值为…

CSS Grid布局入门:从零开始创建一个网格系统

CSS Grid布局入门&#xff1a;从零开始创建一个网格系统 引言 在响应式设计日益重要的今天&#xff0c;CSS Grid布局系统是前端开发中的一次革新。它使得创建复杂、灵活的布局变得简单而直观。本教程将通过分步骤的方式&#xff0c;让你从零开始掌握CSS Grid&#xff0c;并在…