返回
jsRPC 之旅:网易云音乐评论解密
后端
2023-10-10 19:27:01
在这个信息爆炸的时代,我们经常会在社交媒体上看到各种各样精彩的评论。这些评论不仅反映了网友们的思想和观点,也为我们提供了了解社会风向的窗口。然而,由于某些平台的评论系统采用了加密措施,我们无法直接获取评论的原始内容。
今天,我们就来揭秘网易云音乐评论加密的奥秘,踏上一段激动人心的 jsRPC 逆向之旅。
环境搭建
在开始逆向之前,我们需要搭建好必要的环境:
- Python 3.6+
- Selenium
- BeautifulSoup4
获取请求数据
首先,我们需要使用 Selenium 模拟浏览器行为,获取网易云音乐评论请求的数据。代码如下:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def get_request_data():
# 打开网易云音乐评论页
driver = webdriver.Chrome()
driver.get("https://music.163.com/#/comment?id=xxxx")
# 等待评论加载完毕
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "srch_form")))
# 获取请求数据
request_data = driver.execute_script("return window.__INITIAL_DATA__")
return request_data
request_data = get_request_data()
分析请求数据
获取到请求数据后,我们需要分析其结构,找到包含评论加密信息的字段。在 request_data 中,找到如下字段:
"commentThread": {
"ugcResponseVO": {
"song": {
"commentId": "123456"
},
"comments": []
}
}
commentId 字段包含了评论的 ID,而 comments 字段则包含了评论的加密内容。
解密评论
网易云音乐评论采用 jsRPC 方式加密,我们需要编写代码对其进行逆向解密。首先,找到 jsRPC 的加密函数:
function Jsrpc(params) {
// 加密代码...
}
然后,使用 Python 中的 exec
函数执行这段 JavaScript 代码,并将加密函数赋值给变量:
jsrpc_func = """
function Jsrpc(params) {
// 加密代码...
}
"""
exec(jsrpc_func)
最后,使用 Jsrpc 函数对评论进行解密:
import base64
def decrypt_comment(comment):
params = {"params": base64.b64decode(comment), "encType": "aes"}
decrypted_comment = Jsrpc(params)["result"]["content"]
return decrypted_comment
示例代码
# 获取评论加密内容
comments = request_data["commentThread"]["ugcResponseVO"]["comments"]
encrypted_comments = [comment["content"] for comment in comments]
# 解密评论
decrypted_comments = []
for comment in encrypted_comments:
decrypted_comment = decrypt_comment(comment)
decrypted_comments.append(decrypted_comment)
# 输出解密后的评论
print(decrypted_comments)
总结
通过这篇教程,我们成功逆向了网易云音乐评论加密算法,并提取到了评论的原始内容。jsRPC 逆向技术在实际场景中有着广泛的应用,掌握这一技术可以极大地提高我们的爬虫能力。