获取网易云音乐评论

Python 获取网易云音乐热门评论,周杰伦歌曲晴天 最近在研究文本挖掘相关的内容,所谓巧妇难为无米之炊,要想进行文本分析,首先得到有文本吧。获取文本的方式有很多,比如从网上下载现成的文本文档,或者通过第三方提供的API进行获取数据。但是有的时候我们想要的数据并不能直接获取,因为并不提供直接的下载渠道或者API供我们获取数据。那么这个时候该怎么办呢?有一种比较好的办法是通过网络爬虫,即编写计算机程序伪装成用户去获得想要的数据。利用计算机的高效,我们可以轻松快速地获取数据。 那么该如何写一个爬虫呢?有很多种语言都可以写爬虫,比如Java,php,python 等 阅读详情

首先分析可以得到网易云音乐的评论不是在网页源代码中存储的,而是通过ajax异步请求得到的数据,浏览器开启F12,刷新网页,发现这个请求返回的数据就是我们想找到的评论数据。
在这里插入图片描述
但是查看其请求头却发现,请求的参数是加密过的,那么如何找到这个加密方法呢?
在这里插入图片描述
在这里插入图片描述
通过查看Initiator我们可以定位到发起这个请求的js文件
在这里插入图片描述

在这里插入图片描述
然后我们在这行打上断点,刷新界面,观察变量的值,我们发现这个值已经被加密处理过来,然后我们查看函数调用的堆栈,一个一个的分析,找到被加密的地方。
在这里插入图片描述
然后找到了加密的地方
在这里插入图片描述
其实window.asrsea就是函数d

function a(a) {
        var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";
        for (d = 0; a > d; d += 1)
            e = Math.random() * b.length,
            e = Math.floor(e),
            c += b.charAt(e);
        return c
    }
    function b(a, b) {
        var c = CryptoJS.enc.Utf8.parse(b)
          , d = CryptoJS.enc.Utf8.parse("0102030405060708")
          , e = CryptoJS.enc.Utf8.parse(a)
          , f = CryptoJS.AES.encrypt(e, c, {
            iv: d,
            mode: CryptoJS.mode.CBC
        });
        return f.toString()
    }
    function c(a, b, c) {
        var d, e;
        return setMaxDigits(131),
        d = new RSAKeyPair(b,"",c),
        e = encryptedString(d, a)
    }
    function d(d, e, f, g) {
        var h = {}
          , i = a(16);
        return h.encText = b(d, g),
        h.encText = b(h.encText, i),
        h.encSecKey = c(i, e, f),
        h
    }
    function e(a, b, d, e) {
        var f = {};
        return f.encText = c(a + e, b, d),
        f
    }
    window.asrsea = d,

那么这个时候我们已经知道加密的js代码了,此时只需将这段js代码用python来实现即可。我们首先来看函数d的参数,第一个参数d是将i9b这个变量转成json的字符串,因此我们在python中定义同样的变量即可。

i9b = {
    "csrf_token": "",
	"cursor": "-1",
	"offset": "0",
	"orderType": "1",
	"pageNo": "1",
	"pageSize": "20",
	"rid": "R_SO_4_1901371647",
	"threadId": "R_SO_4_1901371647"
}

第二个参数e,传入的是bsP6J(["流泪", "强"])bsP6J是一个函数

		var bsP6J = function(cxG5L) {
        var m9d = [];
        j9a.bg9X(cxG5L, function(cxF5K) {
            m9d.push(Xk6e.emj[cxF5K])
        });
        return m9d.join("")
    };

我们直接打开浏览器的Console面板,运行这个语句,发现得到的值都是一样的,即字符串"010001"。那我们就声明e = "010001"
在这里插入图片描述
按照此方法可以得到

f = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
g = "0CoJUm6Qyw8W8jud"

至此,d函数的参数已经全部确定。
接下来,我们先看函数d中的h.encSecKey的值是如何确定的, h.encSecKey = c(i, e, f),其中的i是由函数函数a返回的,查看函数a的代码可以发现其功能就是返回一个长度为16的字符串,但是是随机的,每次返回的结果是不一样的,由此我们可以得出,在c函数中,这个变量i的值每次都不一样,而e和f的值又是确定的,所以我们只要固定i是固定的,那么c函数返回的值也是固定的,所以我们直接取一次运行的i值,代入函数c中,得到的encSecText作为我们的参数即可。改写成python代码如下:

#随便取一次调试的值即可 
def get_encSecKey():  # 由于i是固定的. 那么encSecText就是固定的.  c()函数的结果就是固定的
    return "1b5c4ad466aabcfb713940efed0c99a1030bce2456462c73d8383c60e751b069c24f82e60386186d4413e9d7f7a9c7cf89fb06e40e52f28b84b8786b476738a12b81ac60a3ff70e00b085c886a6600c012b61dbf418af84eb0be5b735988addafbd7221903c44d027b2696f1cd50c49917e515398bcc6080233c71142d226ebb"

接下来我们分析h.encText是如何得到的,先看函数b

function b(a, b) {  # a是要加密的内容, 
        var c = CryptoJS.enc.Utf8.parse(b) #  # b是秘钥
          , d = CryptoJS.enc.Utf8.parse("0102030405060708")
          , e = CryptoJS.enc.Utf8.parse(a)  # e是数据
          , f = CryptoJS.AES.encrypt(e, c, {  # c 加密的秘钥
            iv: d,  # 偏移量
            mode: CryptoJS.mode.CBC  # 模式: cbc
        });
        return f.toString()
    }
h.encText = b(d, g)  # g秘钥
h.encText = b(h.encText, i)  # 返回的就是params  i也是秘钥

就是将内容进行了两次加密,两次使用的密钥不一样,第二次加密的内容就是第一次加密返回的结果作为参数传入。而b函数查看代码也看出了这个是AES加密,而python中也存在同样的包,对此,可以将加密方法改装成python代码。

# 把参数进行加密
def get_params(data):  # 默认这里接收到的是字符串
    first = enc_params(data, g)
    second = enc_params(first, i)
    return second  # 返回的就是params

# 加密过程
def enc_params(data, key):
    iv = "0102030405060708"
    data = to_16(data)
    aes = AES.new(key=key.encode("utf-8"), IV=iv.encode('utf-8'), mode=AES.MODE_CBC)  # 创建加密器
    bs = aes.encrypt(data.encode("utf-8"))  # 加密, 加密的内容的长度必须是16的倍数
    return str(b64encode(bs), "utf-8")  # 转化成字符串返回,

# 转化成16的倍数, 为下方的加密算法服务
def to_16(data):
    pad = 16 - len(data) % 16
    data += chr(pad) * pad
    return data

所有代码如下

# 需要安装pycrypto:   pip install pycrypto
#coding = utf-8
from Crypto.Cipher import AES
from base64 import b64encode
import requests
import json

url = "https://music.163.com/weapi/comment/resource/comments/get?csrf_token="

# 请求方式是POST
i9b = {
    "csrf_token": "",
	"cursor": "-1",
	"offset": "0",
	"orderType": "1",
	"pageNo": "1",
	"pageSize": "20",
	"rid": "R_SO_4_1901371647",
	"threadId": "R_SO_4_1901371647"
}

# 服务于d的
f = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
g = "0CoJUm6Qyw8W8jud"
e = "010001"
i = "d5bpgMn9byrHNtAh"  # 手动固定的. -> 人家函数中是随机的

def get_encSecKey():  # 由于i是固定的. 那么encSecText就是固定的.  c()函数的结果就是固定的
    return "1b5c4ad466aabcfb713940efed0c99a1030bce2456462c73d8383c60e751b069c24f82e60386186d4413e9d7f7a9c7cf89fb06e40e52f28b84b8786b476738a12b81ac60a3ff70e00b085c886a6600c012b61dbf418af84eb0be5b735988addafbd7221903c44d027b2696f1cd50c49917e515398bcc6080233c71142d226ebb"


# 把参数进行加密
def get_params(data):  # 默认这里接收到的是字符串
    first = enc_params(data, g)
    second = enc_params(first, i)
    return second  # 返回的就是params


# 转化成16的倍数, 位下方的加密算法服务
def to_16(data):
    pad = 16 - len(data) % 16
    data += chr(pad) * pad
    return data


# 加密过程
def enc_params(data, key):
    iv = "0102030405060708"
    data = to_16(data)
    aes = AES.new(key=key.encode("utf-8"), IV=iv.encode('utf-8'), mode=AES.MODE_CBC)  # 创建加密器
    bs = aes.encrypt(data.encode("utf-8"))  # 加密, 加密的内容的长度必须是16的倍数
    return str(b64encode(bs), "utf-8")  # 转化成字符串返回,
    
# 发送请求. 得到评论结果
resp = requests.post(url, data={
    "params": get_params(json.dumps(i9b)),
    "encSecKey": get_encSecKey()
})

print(resp.text)

结果如下:
在这里插入图片描述

Python爬虫:网易云音乐评论爬取 目录0x00 写在前面0x01 iframe处理0x02 获取歌单0x03 获取歌曲0x04 获取评论 0x00 写在前面 这次的网易云音乐评论爬取跟ctfhub登录+签到一样,算是一次实战吧,也算是把这几天学习到的给真正拿来运用了,在这期间呢也确实又学到了新的知识,也对之前学的selenium的知识做了巩固。 0x01 iframe处理 先来看网页源码 这里采用了iframe来构造页面,当我们单纯显示网站源码时,iframe里的东西我们时看不到的,所以我这里采用了selenium的switch_to.f 阅读详情

相关推荐

爬取网易云音乐歌曲数据:获取歌曲信息与评论的Python爬虫实战

本文介绍了如何使用Python爬虫技术爬取网易云音乐的歌曲信息和评论数据。通过合理使用requestsSelenium等工具,我们能够获取到网易云音乐中的歌曲详细信息和评论内容,并将其存储到SQLite数据库中进行分析。

2201_76125261的博客 2098

网易云音乐评论爬取

(给Python开发者加星标,提升Python技能)作者:法纳斯特(本文来自作者投稿,简介见末尾)近日,民谣歌手花粥被爆出涉嫌抄袭。具体的我就不细说了,音乐圈的抄袭风波也...

Python开发者 1426

YOLOv8中Bottleneck模块的残差连接机制解析

本文深入解析了YOLOv8目标检测模型中Bottleneck模块的核心设计,重点阐述了其残差连接机制。该机制通过构建一条信息“捷径”,有效缓解了深层网络中的梯度消失问题,稳定了训练过程,并提升了特征提取效率。文章结合代码详细拆解了模块结构,并探讨了其在YOLOv8骨干网络与检测头中的关键作用及参数调优思路。

weixin_29061821的博客 253

爬取网易云音乐评论

爬取网站介绍与分析 网站介绍 本次爬取的是网易云音乐(https://music.163.com/)的评论信息,以音乐榜单中的云音乐飙升榜为例,其中展示了100首飙升榜音乐,爬取这100首歌每首前10页的音乐评论,共计约2万条评论信息。 爬虫目的 爬取网易云音乐评论 页面分析 评论页面的请求经过JS处理,每页评论的url地址通过post请求发送给服务端,formdata包含两个参数,分...

qq_45351815的博客 892

Android 13/14/15 默认授权应用权限的实现方法

Android版本修改方式实现原理13/14修改Permission.java将所有权限标记为Normal权限15修改DeviceIdleController.java + DefaultPermissionGrantPolicy.java监听应用安装并主动授权。

m0_60898338的博客 2909

智能车竞赛走马观碑组:如何高效识别目标板并优化绕行策略(附实战代码)

本文深入探讨了智能车竞赛走马观碑组中,如何构建从图像识别到路径决策的全栈优化方案。针对目标板识别与绕行策略的核心难点,文章详细解析了基于MobileNetV2的高效识别流水线、结合预瞄点与纯追踪算法的平滑路径规划,以及横向与纵向协同控制策略,并提供了实战代码与调试指南,旨在全面提升小车的比赛表现。

o5p6q的博客 884

网易云音乐怎么获取别人的评论

网易云音乐怎么获取别人的评论,仅需要一个id 最近也在研究这个,反正是各种百度,问题很多,不过最终还是实现了 。 上图首先获取用户id然后分析用户歌单信息,筛选出播放次数最高的100首歌曲,获得歌曲id这里,使用了一个不算太全面的方法,但是如果不这样,数据量太大,难做的一批然后分析这100首歌曲评论,找到与用户id相同的,直接在下边print下边是用我朋友号测试的,我看到出了就停了,因为要好久哦,估计电脑配置不行(▼皿▼#)。好了,到此结束。有什么问题可以探讨,没什么花里胡哨的,就python就完了。 .

m0_46471691的博客 4147

2025.03.14【读书笔记】|GWAS分析神器:BOLT-LMM工具介绍与快速安装

在生物信息学领域,全基因组关联分析(GWAS)已成为揭示遗传与疾病关系的强有力工具。BOLT-LMM作为一款专为大规模样本量设计的GWAS分析工具,将极大地提高研究人员的工作效率。大家好,今天我们来聊聊一个非常强大的生物信息学工具——BOLT-LMM。它是基于线性混合模型(LMM)的全基因组关联分析(GWAS)分析工具,通过快速的方差近似方法在计算效率上实现了显著的提升。BOLT-LMM的高效性能使其成为大规模样本GWAS分析的理想选择,它将进一步推动生物信息学和遗传学研究的发展。

1093

爬虫6:爬取网易云音乐评论

过程比较艰辛,具体看代码吧。

bliblisukabulie的博客 1086

告别天价授权!手把手教你用TwinCAT 3.1搭建EtherCAT主站(Windows 10/11保姆级教程)

本文详细介绍了如何在Windows 10/11系统上使用TwinCAT 3.1免费搭建EtherCAT主站,帮助中小企业和个人开发者低成本实现工业自动化。从环境准备、许可证策略到安装配置和实战开发,提供保姆级教程,涵盖PLC编程、运动控制及硬件选型建议,助您轻松入门工业控制领域。

weixin_30664615的博客 360

SAP MM ME21N保存前检查增强

想在ME21N保存前做一些数据检查, 可以做一个增强功能,  运行 CMOD 新增,   增强接口 输入 MM06E005  (  EXIT_SAPMM06E_012 ) ,在 NCLUDE ZXM06U43 .  里写代码功能。  例子如下: *&---------------------------------------------------------------------*

heng0757的专栏 1万+

JS逆向获取网易云音乐评论并保存到mongodb数据库

JS逆向获取网易云音乐评论 前言: 这段时间,一直在研究JS逆向,今天小试牛刀一下,利用JS逆向技术获取网易云音乐评论。 一、分析网页 其实网易云音乐评论的api很好找到的,我们通过F12进入到浏览器(chrome)的开发者模式,因为音乐的评论是动态加载的网页,所以我们可以直接定位到network下的XHR选项,如图: 经过我们一个个的查找分析,定位到get?csrf_token=这个网页,这个里面就是包含评论信息的内容: 可以看出这个网页数据属于json格式的数据,里面包含了评论的内容,评论者的信息

weixin_46913162的博客 1075

Rockchip开发系列 - 3.4.GPIO扩展芯片AW95xx和PCA953X(2)

Rockchip开发系列 - 3.3.GPIO扩展芯片AW95xx和PCA953X(2)

fulinux的博客 1000

Python 获取 网易云音乐热门评论,轻松搞定!

最近在研究文本挖掘相关的内容,所谓巧妇难为无米之炊,要想进行文本分析,首先得到有文本吧。获取文本的方式有很多,比如从网上下载现成的文本文档,或者通过第三方提供的API进行获取数据。但是有的时候我们想要的数据并不能直接获取,因为并不提供直接的下载渠道或者API供我们获取数据。那么这个时候该怎么办呢?有一种比较好的办法是通过网络爬虫,即编写计算机程序伪装成用户去获得想要的数据。利用计算机的高效,我们可以轻松快速地获取数据。 那么该如何写一个爬虫呢?有很多种语言都可以写爬虫,比如Java,php,py...

weixin_45820912的博客 959

dji psdk开发 关于SDK认证芯片的使用

Payload SDK V3.10.0 于 2025-1-8 发布,增加了 Matrice 4T/4E 机型支持,同时也增加了 DJI SDK 认证芯片(DJI SDK CC)功能支持。关于认证芯片的介绍大疆 SDK 认证芯片(DJI SDK Certified Chip),简称 DJI SDK CC,用于认证基于 DJI Eport/Eport-Lite 接口开发的第三方负载设备,确保设备能够正常工作并与无人机可以进行有效通信,起到负载安全认证和功能授权的作用。

热爱生活,忠于自己 2145

C++Test&IAR

C++Test ,IAR方式

用爬虫获取网易云音乐热门歌手评论数

转载请注明作者和出处:http://blog.youkuaiyun.com/Monkey_D_Newdun运行平台:Windows 10IDE:PycharmPython版本:3.6.0浏览器:Chrome前言所需模块步骤解析爬取歌曲评论数爬取热门歌手ID爬取歌手热门单曲ID总体代码总结1.前言       刚开始学Python和爬虫,由于也是网易云音乐的忠实用户,所以就想做一个网易云音乐的爬虫。本来想做一个...

Monkey_D_Newdun的博客 3070

超声波 测距 模块 原理图 PCB

超声波测距制作 AD6 原理图 PCB BOM超声波测距制作 AD6 原理图 PCB BOM

python爬虫获取网易云音乐评论歌词以及歌曲地址

JSON.stringify 是 JavaScript 中的一个全局函数,用于将一个 JavaScript 值(如 JavaScript 对象或数组)转换为 JSON 格式的字符串。这对于将数据保存到文件、在网页之间传递数据、或发送到服务器(例如通过 AJAX 请求)非常有用,因为 JSON 是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。首先我们要获取Qu1x.md的值我们直接控制台输入Qu1x.md。因为这三个接口的加密是一样的这里我们用评论的接口来讲解。

qq_62975494的博客 2198

【野火】零死角玩转STM32—F407霸天虎_V2_stm32f407_

stm32f407V2的操作说明,1000多页。适合初学者使用。

【大作业-24】使用yolo11进行车辆检测与追踪源码+数据集+模型+视频讲解.zip

作品详细介绍请看这里:https://blog.youkuaiyun.com/echoson/category_12754211.html

Python获取网易云音乐的评论

摘要:这是一个使用Selenium从网易云音乐抓取歌曲评论数据的Python脚本。脚本通过配置Chrome浏览器选项,包括禁用GPU加速、设置用户代理等,然后初始化WebDriver访问指定歌曲页面。利用CDP协议监听网络请求,当检测到评论API接口(weapi/comment/resource/comments/get)时,捕获其响应数据并保存为JSON文件。最后自动关闭浏览器。脚本实现了自动化抓取网易云音乐评论的功能。(149字)

℡メ㏑╭ァ小凯 406

python3爬虫(4):获取网易云音乐歌手所有歌曲及歌曲的精选评论

1. 需要的python包 >pip install pycryptodome >pip install requests >>pip install lxml 2. 实践1:爬取网易云平台的所有歌手id """ sources:https://github.com/wanhaiwei/wangyiyun/blob/master/get_all_singer.py """ import requests import re import csv import json cla

rosefun96的博客 3747

Python 获取 网易云音乐热门评论

来自:lyrichu - 博客园链接:www.cnblogs.com/lyrichu/p/6635798.html(点击尾部阅读原文前往)已获转载授权最近在研究文本挖掘相关的内容,所谓巧妇难为无米之炊,要想进行文本分析,首先得到有文本吧。获取文本的方式有很多,比如从网上下载现成的文本文档,或者通过第三方提供的API进行获取数据。但是有的时候我们想要的数据并不能直接获取,因为并不提供直接的下载渠道或

程序猿 996

Python获取网易云音乐热门评论-笔记

Python 获取 网易云音乐热门评论(python2/python3代码)

taotiezhengfeng的博客 2633

仿网易云音乐网页版html代码_使用Python获取网易云音乐热门评论,收集那些令人深省的文案...

前言最近在研究文本挖掘相关的内容,所谓巧妇难为无米之炊,要想进行文本分析,首先得到有文本吧。获取文本的方式有很多,比如从网上下载现成的文本文档,或者通过第三方提供的API进行获取数据。但是有的时候我们想要的数据并不能直接获取,因为并不提供直接的下载渠道或者API供我们获取数据。那么这个时候该怎么办呢?有一种比较好的办法是通过网络爬虫,即编写计算机程序伪装成用户去获得想要的数据。利用计算机的高效,我...

weixin_39926588的博客 966
上一篇: python获取新发地菜价信息
下一篇: 使用requests请求时报错requests.exceptions.SSLError: HTTPSConnectionPool
PGEva
博客等级 码龄10年 78粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值