网易云音乐获取加密方式的教程

通过抓包一步到位分析出来的是比较简单的,但某些网站的某个请求中的参数可能是JavaScript计算出来等情况。

比方说我们最常接触的网易云音乐,很多人表示网易云音乐的歌曲热门评论很难抓取,因为请求评论的数据的中的请求参数是经过JavaScript计算加密过的。

而对于这一类的网站,我们通常会有三种情况,对于这几种情况无疑都需要对网页请求的整个流程有比较好的把握,以及能比较有耐心的一层一层分析请求参数等等的来源。

首先按我们看上面的网易云音乐的请求评论数据的参数:params encSecKey,同时在Name栏目可以清楚地看到处理该参数的 js 文件为core.js

所以为了弄清楚两个参数的来源,我们把core.js文件下载到本地,使用Javascript在线解压缩 - 在线工具解压缩,得到标准格式的JavaScript文件,搜索两个参数。

我们会发现这两个参数来源于window.asrsea的函数加密,window.asrsea需要四个参数,为了弄清楚这四个参数的来源,我们可以改变本地core.js代码,并用fildder替换执行。

替换之后查看Chrome中的console输出,查看四个参数的值信息,可以看出除了bl其他的几个参数都是固定的字符串值。再看bl值,bl 值由字典构成,总共有五个key值。

rid:rid值由一个固定字符串R_SO_4_和歌曲的id构成

offset:表示当前是第几页的评论数据

total:固定值true

limit:每页显示多少个评论,默认20

csrf_token:无关可以为空

我们知道了参数的来源,弄清楚函数的具体执行流程是什么,一切就豁然开朗了。追踪window.asrsea函数,找到如下内容,现在我们就弄明白了所有的流程了。

既然弄清楚了所有的JS加密流程下面就有几种方法去解决。

1、使用Python模拟

我正常采用的就是这种手段,先分析具体的JavaScript代码,再尝试用Python去模拟,不过这种选择需要你对Python相对比较熟悉。

```python

modulus =‘00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7'

nonce = '0CoJUm6Qyw8W8jud'

pubKey = '010001'

def aesEncrypt(text, secKey):

    pad = 16 - len(text) % 16

    text = text + pad * chr(pad)

    encryptor = AES.new(secKey, 2, '0102030405060708')

    ciphertext = encryptor.encrypt(text)

    ciphertext = base64.b64encode(ciphertext)

    return ciphertext

def rsaEncrypt(text, pubKey, modulus):

    text = text[::-1]

    rs = int(text.encode('hex'), 16)**int(pubKey, 16) % int(modulus, 16)

    return format(rs, 'x').zfill(256)

def createSecretKey(size):

    return (''.join(map(lambda xx: (hex(ord(xx))[2:]), os.urandom(size))))[0:16]

#调用

# 登录加密算法, 基于https://github.com/stkevintan/nw_musicbox脚本实现

def encrypted_id_request(id):

    text = {

        "c": [json.dumps({"id":id})],

        #"csrf_token":"71b6bb13bc2aa7ba1f72afea1730ce50",

    }

    text = json.dumps(text)

    secKey = createSecretKey(16)

    encText = aesEncrypt(aesEncrypt(text, nonce), secKey)

    encSecKey = rsaEncrypt(secKey, pubKey, modulus)

    data = {

        'params': encText,

        'encSecKey': encSecKey

    }

    return data

```

( 对createSecretKey 的解释见  https://www.jianshu.com/p/30e6b6fa28fd )

(对AES加密 JavaScript和 python端的应用 见 http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php )

2、Python执行JavaScript代码

Python执行JavaScript代码,如果对Python不是很熟悉,建议采用这种方法,这种方法的可用第三方库比较多,研究了一些文档之后发现:

ScriptControl只能在windows上运行,需要win32com库

PyV8能在windows和*nix上运行,需要装PyV8库

SpiderMonkey是mozilla的js引擎在python上的移植。

经评论区的朋友们提醒,自己也尝试使用了一下另外一个第三方库:Js2Py

此第三方库不但可以执行JavaScript代码,甚至可以把JavaScript代码转换成Python代码,但是在此只推荐转换简单的JavaScript代码,这是一个转换的案例。

由于网易云音乐的评论加密这一块涉及的函数相对较多,这里不推荐使用Python执行JavaScript代码。

3、最粗暴的方法

最粗暴的方法是使用selenium+phantomjs无界面浏览器,这两者的结合其实就是直接操作浏览器,可以获取JavaScript渲染后的页面数据。

这两者结合使用的缺点:

由于是无界面浏览器,采用此方案效率极低,如果大批量抓取不推荐。

对于异步请求并且数据在源码中并不存在的,同时也就无法抓取到的数据。

对这两个不了解可以查一下两者的官方文档,也可以读读这篇文章快都上手:python爬虫的最佳实践(五)--selenium+PhantomJS

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • 看到这个题目的时候也许有人会猜想,这个作者一定是个男生吧,因着某个原因或是某种癖好,羞羞地尝试使用了女生的专用品-...
    Apple小姐阅读 6,883评论 21 16
  • 从收音机中知道,有一种古代武学招式叫八卦游龙掌,讲究先发制人。在感情的比武里,就是最先主动的那个人只是开始时丢些...
    Manba小生阅读 208评论 0 1
  • 姓名:华林 公司:宁波大发化纤有限公司 【日精进打卡第14天】 【知~学习】 《六项精进》3遍 《大学》5遍 【经...
    hualincool阅读 88评论 0 0