网易云评论爬虫破解:加密参数深度解析+自动化批量爬取
网易云评论爬虫破解加密参数深度解析前言爬取网易云评论为何屡屡碰壁想批量抓取网易云音乐的热门评论直接发送请求往往一无所获页面数据根本不会正常返回。这并不是接口失效而是网易云针对爬虫设置了严密的反爬机制核心就是对请求参数做了加密处理普通的无加密请求会直接被服务器拦截根本拿不到评论数据。很多新手卡在第一步就放弃了其实只要摸清加密逻辑、抠出核心加密代码就能轻松绕过反爬实现评论的批量自动化抓取。本篇就从零拆解网易云评论加密原理一步步复现加密流程手把手写出可运行的爬虫脚本全程通俗易懂零基础也能看懂。一、网易云评论反爬手段拆解1. 核心加密参数定位想要破解反爬第一步就是找准加密入口。打开浏览器开发者工具切换到Network面板刷新网易云歌曲评论页筛选XHR请求就能找到获取评论的接口。查看这个接口的请求参数会发现只有两个关键参数在起作用params和encSecKey这两个参数都是一串无规律的密文并非明文参数服务器只会识别这组加密后的参数直接传明文会被拒绝访问。2. 加密来源排查通过浏览器全局搜索这两个参数名很快就能定位到它们并非后台生成而是来自前端的JavaScript加密脚本也就是说加密逻辑完全写在前端JS代码里我们只需要把这段加密代码抠出来在本地复现就能自主生成合法的加密参数。3. 分页参数暗藏玄机在分析控制台返回的数据包时能找到加密前的原始参数格式形如{rid:R_SO_4_479598964,threadId:R_SO_4_479598964,pageNo:2,pageSize:20,cursor:1774515206881,offset:0,orderType:1,csrf_token:f31c762f9047cb4efd42ce23eb02c267}对比多页评论的请求参数不难发现pageNo代表当前页码而cursor是一串时间戳格式的数值起初很难判断它的含义。经过一步步排查溯源最终确定cursor是分页关键取值来自上一页接口返回的JSON数据中每一页的cursor都要依托上一页的结果获取不能随意编造。二、爬虫整体运行逻辑梳理理清参数和加密逻辑后整套PythonJavaScript联动的爬虫逻辑就清晰了全程分为四步环环相扣初始传参Python脚本传入第一页的初始页码和默认cursor值调用本地JS加密文件加密生成JS文件通过内置的加密算法处理原始参数生成合法的params和encSecKey密文返回给Python请求数据Python携带加密参数向网易云接口发送POST请求获取评论JSON数据循环翻页解析返回的JSON提取评论内容同时拿到下一页需要的cursor值再配合新的pageNo循环调用JS加密、发送请求实现全自动多页抓取。三、核心加密JS代码精简版下方是抠取并优化后的核心加密代码为了方便阅读已省略冗长的底层加密方法完整全套JS源码可私信博主免费领取直接拿来就能用无需二次修改。windowglobalvarCryptoJSrequire(crypto-js)// 此处省略大量底层RSA、AES加密方法// 完整源码私信博主免费领取!function(){functiona(a){vard,e,babcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,c;for(d0;ad;d1)eMath.random()*b.length,eMath.floor(e),cb.charAt(e);returnc}functionb(a,b){varcCryptoJS.enc.Utf8.parse(b),dCryptoJS.enc.Utf8.parse(0102030405060708),eCryptoJS.enc.Utf8.parse(a),fCryptoJS.AES.encrypt(e,c,{iv:d,mode:CryptoJS.mode.CBC});returnf.toString()}functionc(a,b,c){vard,e;returnsetMaxDigits(131),dnewRSAKeyPair(b,,c),eencryptedString(d,a)}functiond(d,e,f,g){varh{},ia(16);returnh.encTextb(d,g),h.encTextb(h.encText,i),h.encSecKeyc(i,e,f),h}functione(a,b,d,e){varf{};returnf.encTextc(ae,b,d),f}window.asrsead,window.ecnonasre}();functionget_e4i(pageNo,cursor){varstr{rid:R_SO_4_479598964,threadId:R_SO_4_479598964,pageNo:${pageNo},pageSize:20,cursor:${cursor},offset:0,orderType:1,csrf_token:df9a3fb556b47931eeec5c5eb9faac9b}varbVA3xwindow.asrsea(str,010001,00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7,0CoJUm6Qyw8W8jud);vare4i{params:bVA3x[encText],encSecKey:bVA3x[encSecKey]}returne4i;}// 接收Python传入的页码和cursor参数varpageNoprocess.argv[2];varcursorprocess.argv[3];e4iget_e4i(pageNo,cursor);// 输出加密后的JSON字符串console.log(JSON.stringify(e4i))四、Python爬虫完整代码这套Python代码实现了与JS脚本的联动、接口请求、评论解析、自动翻页功能直接运行即可抓取指定歌曲的多页评论适配Windows、Linux等多平台运行。importjsonimportsubprocessimportrequests# 请求所需cookies可根据自身实际情况替换cookies{vinfo_n_f_l_n3:3916ff44beb0c078.1.0.1757143646311.0.1757143808916,_ga:GA1.1.303110697.1757770466,_clck:1l10bbd%5E2%5Efza%5E0%5E2082,_ga_C6TGHFPQ1H:GS2.1.s1757770465$o1$g1$t1757770693$j60$l0$h0,_iuqxldmzr_:32,_ntes_nnid:1ee47c1a495259c0598a10bf662afb17,1757998978281,_ntes_nuid:1ee47c1a495259c0598a10bf662afb17,NMTID:00Onmu3maG4d-bidkIqvMR7jmYMoK0AAAGZUOeSwA,WEVNSM:1.0.0,WNMCID:ixgtne.1757998979571.01.0,WM_TID:xSejT%2BxV169FUVUARFLC0mdBuTqCwgVE,sDeviceId:YD-QZLe%2FrgGqQ1ARxURVUaHgnYMn5zRcAzJ,ntes_utid:tid._.GaFvf4nQEeZFB1EBBAKSwiZYi9jUcF2I._.0,__snaker__id:QPd9674UKVC6UyD0,ntes_kaola_ad:1,__csrf:df9a3fb556b47931eeec5c5eb9faac9b,gdxidpyhxdE:Lr%5Cm7yjN0baYEslbOj70BUDx%2BaSZjyognN6TZ1qp4uNlg%2B7uwWfuXHxCZQ0koz%5CM6QC8Z87kvmw7Vq23kZMRAGPjo3tT0Za37oGUh6v95wvQOX8d9k9dPeixk7XVIMVownl8i2VoBNvmZKk2%2F4HeHBBnUv%2B5X5Qhd5gsHVfq52vpWnTA%3A1761309901295,__csrf:2e43ce8440e8205e4ff136f3bee8a999,MUSIC_U:00A6A69BA388EFF9FF603463A34052FA657123138702A5775E8A75E2BBE8E49E0814AACC357E7005C3F6BE0B9B8CCE2F34FA0F52FF11F21A892879D4B86B204FF69C20FEAA5239B90F3688D110A90F195A07B6432F29A3FD654CD91A34291DEE2DF4304B30FE2620A8E985679290983FD5F10427790F8AF4D8A6B515D20B37FB4BAFAC033F3D1F4CC49E66AA60E38F4C52704336694DB87DAAA5AAB16077972A982A24FE077C5C7CCE452DEB5BFFB3B267B4D5F5CD5414B3B14FAC60DA9EF8FEC0FF31B19D04F09263BF9BF643A46A14354CEEADEA26BB1C12CDEE4C4E9B6279BE90B82A2AD96682386EABA636B26A7CF1802D226CC46DA59C41F65C836BEE9D930B229DCC8CE609BCFF50DD0D52E40E89829B5D8AC419CDD30FD7A046422D0F16BD8DE34455B8D0DA9A369DD41E6C6394EDB2AF078FBBE219C9659033549885544E0F77B51B64AEE79965065357C4FE7222DC8CC181E7602CBF88AD2760EC257045DA826950875488D84B8CB45F3173C694A5314567ACD1353A3290C9C979E9BF30B78FC78F5577F1F3CCDBF79B9823A6,WM_NI:0%2Fqh5Zr05FWZOBbYWHnGavPVTEWByHTGF5kG6B7ZiDBNYQLgdqbJHNdpaoyxaG%2B%2FiCo%2FJ%2FKId96xu2l5ZmkE4nuWVD0rFl5a2pyyMGqU5qW99Dpf9RvvjqwvTDTFSrJxaEk%3D,WM_NIKE:9ca17ae2e6ffcda170e2e6eed6ef33f2969fd2f63bf4ef8eb6d14b929b8badd77393b8a8b7b56ae9abc0b3dc2af0fea7c3b92af4f1bf89b852b2f0fba7d6528d9eaebad644ae99af97d35e989b99a3fc4498998ad6ea4df69ef9bbec50829297b2cf6da8afaeabcb46a8b0af90fc74a399e5d0ec49adf186d0ca43a8e7fa99f83ab0eb968eea4ff8b2bbb8d550f4ae8a8db86bf2b0b79ad04db38bfb92d633fb9cc087bc5ab6aaa692f67e989c9ca7d27a8aa8afa6ea37e2a3,JSESSIONID-WYYY:E9tVXgCZkBIzumU3MUSEAqvvWgwl05Ge64udhyVyESlIP9TsxYuO%2F3MbCqmMzSPdVj%2B6K8%2FZqtkVNTT5tibBXjE%2B%2FgqvOK%5Cn8Oig2K99SizwWnIm%5CV6esKwm%2Bli9%5ChkWnTz28IjrJlZvWwqQeog%5CSKn%5CJ%2FxXENjt0Y4HjXsOMKV%5C5441%3A1761570156119,}# 请求头模拟浏览器访问绕过基础反爬headers{accept:*/*,accept-language:zh-CN,zh;q0.9,cache-control:no-cache,content-type:application/x-www-form-urlencoded,origin:https://music.163.com,pragma:no-cache,priority:u1, i,referer:https://music.163.com/song?id479598964,sec-ch-ua:Google Chrome;v141, Not?A_Brand;v8, Chromium;v141,sec-ch-ua-mobile:?0,sec-ch-ua-platform:Windows,sec-fetch-dest:empty,sec-fetch-mode:cors,sec-fetch-site:same-origin,user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36,}# 接口请求参数params{csrf_token:df9a3fb556b47931eeec5c5eb9faac9b,}# 初始化cursor第一页默认为-1cursor-1# 循环抓取前4页评论可自行修改页数foriinrange(1,5):# 调用node执行JS脚本生成加密参数resultsubprocess.run([node,04.js,str(i),cursor],capture_outputTrue,textTrue,encodingutf-8)resultresult.stdout.strip()# 解析JS返回的加密参数datajson.loads(result)# 发送POST请求获取评论数据responserequests.post(https://music.163.com/weapi/comment/resource/comments/get,paramsparams,cookiescookies,headersheaders,datadata,)rresponse.json()# 提取当前页评论和下一页cursorcommentsr[data][comments]cursorstr(r[data][cursor])# 打印评论数据print(*55,第,i,页,*55,START!)forcommentincomments:print(用户,comment[user][nickname])print(内容,comment[content])print(日期,comment[time])print(-*30)print(*10,第,i,页,*10,END!)五、运行前置准备安装Node.js环境用于运行JS加密脚本安装Python依赖库执行命令pip install requests安装CryptoJS依赖在JS文件目录执行命令npm install crypto-js将JS文件命名为04.js与Python脚本放在同一目录下。六、重要声明本篇教程仅用于编程学习、技术研究严禁将代码用于商业用途、恶意批量爬取、数据倒卖等违法违规行为使用过程中请遵守网易云音乐平台协议和相关法律法规一切违规使用后果自负。结语破解网易云评论加密核心就是找准params和encSecKey这两个加密参数抠出前端JS加密逻辑再通过Python和JS联动实现自动加密、自动翻页。看似复杂的反爬机制只要理清思路、分步拆解就能轻松攻克。持续关注我后续会更新更多网站爬虫破解、JS加密逆向、Python实战脚本干货带你玩转网络爬虫与逆向工程轻松搞定各类反爬难题完整JS源码私信即可免费领取手把手带你跑通全套流程