網(wǎng)易云音樂資源爬缺》纭(登錄+評(píng)論)

如何爬取網(wǎng)易云音樂的評(píng)論呢君仆?

1.文本以華晨宇的《我的滑板鞋2016》為例

http://music.163.com/#/song?id=437859519

2.使用瀏覽器的工具丐一,查找獲取評(píng)論的url

http://music.163.com/weapi/v1/resource/comments/R_SO_4_437859519/

3.不難發(fā)現(xiàn)卓练,此API是通過POST請(qǐng)求獲得我們想要的評(píng)論信息的,需要POST的參數(shù)有params和encSecKey晒哄,網(wǎng)易為了反爬蟲睁宰,加密了這2個(gè)參數(shù),不過不要緊寝凌,下面有加密過程


4.POST請(qǐng)求成功后柒傻,會(huì)得到一個(gè)JSON字符串,里面就包含了各種評(píng)論信息


5.下面就用JAVA來實(shí)現(xiàn)評(píng)論的獲取

AES加密工具類

import java.util.Base64;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class EncryptTools {
    //AES加密
    public static String encrypt(String text, String secKey) throws Exception {
        byte[] raw = secKey.getBytes();
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        // "算法/模式/補(bǔ)碼方式"
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
        // 使用CBC模式较木,需要一個(gè)向量iv红符,可增加加密算法的強(qiáng)度
        IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        byte[] encrypted = cipher.doFinal(text.getBytes());
        return Base64.getEncoder().encodeToString(encrypted);
    }
  //字符填充
  public static String zfill(String result, int n) {
        if (result.length() >= n) {
            result = result.substring(result.length() - n, result.length());
        } else {
            StringBuilder stringBuilder = new StringBuilder();
            for (int i = n; i > result.length(); i--) {
                stringBuilder.append("0");
            }
            stringBuilder.append(result);
            result = stringBuilder.toString();
        }
        return result;
    }
}

評(píng)論獲取

public void commentAPI() throws Exception {
        //私鑰,隨機(jī)16位字符串(自己可改)
        String secKey = "cd859f54539b24b7";
        String text = "{\"username\": \"\", \"rememberLogin\": \"true\", \"password\": \"\"}";
        String modulus = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7";
        String nonce = "0CoJUm6Qyw8W8jud";
        String pubKey = "010001";
        //2次AES加密伐债,得到params
        String params = EncryptTools.encrypt(EncryptTools.encrypt(text, nonce), secKey);
        StringBuffer stringBuffer = new StringBuffer(secKey);
        //逆置私鑰
        secKey = stringBuffer.reverse().toString();
        String hex = Hex.encodeHexString(secKey.getBytes());
        BigInteger bigInteger1 = new BigInteger(hex, 16);
        BigInteger bigInteger2 = new BigInteger(pubKey, 16);
        BigInteger bigInteger3 = new BigInteger(modulus, 16);
        //RSA加密計(jì)算
        BigInteger bigInteger4 = bigInteger1.pow(bigInteger2.intValue()).remainder(bigInteger3);
        String encSecKey= Hex.encodeHexString(bigInteger4.toByteArray());
        //字符填充
        encSecKey= EncryptTools.zfill(encSecKey, 256);
        //評(píng)論獲取
        Document document = Jsoup.connect("http://music.163.com/weapi/v1/resource/comments/R_SO_4_437859519/").cookie("appver", "1.5.0.75771")
                .header("Referer", "http://music.163.com/").data("params", params).data("encSecKey", encSecKey)
                .ignoreContentType(true).post();
        System.out.println("評(píng)論:" + document.text());
    }

那么如何登錄網(wǎng)易云音樂呢预侯?

1.查找登錄的API地址(在瀏覽器登錄一次,在network中查看url)


Paste_Image.png

2.查看登錄時(shí)post需要提交的參數(shù)


Paste_Image.png

3.是不是很熟悉峰锁?和剛才獲取評(píng)論的時(shí)候一樣萎馅,該如何做呢?看看下面的示例代碼

在上面AES加密工具類中添加MD5加密方法

    public static String md5(String pwd) {
        try {
            MessageDigest digest = MessageDigest.getInstance("md5");
            byte[] bs = digest.digest(pwd.getBytes());
            String hexString = "";
            for (byte b : bs) {
                int temp = b & 255;
                if (temp < 16 && temp >= 0) {
                    hexString = hexString + "0" + Integer.toHexString(temp);
                } else {
                    hexString = hexString + Integer.toHexString(temp);
                }
            }
            return hexString;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }

登錄請(qǐng)求

    public void loginAPI(String username, String password) throws Exception {
        password = EncryptTools.md5(password);
        // 私鑰虹蒋,隨機(jī)16位字符串(自己可改)
        String secKey = "cd859f54539b24b7";
        String text = "{\"username\": \"" + username + "\", \"rememberLogin\": \"true\", \"password\": \"" + password
                + "\"}";
        String modulus = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7";
        String nonce = "0CoJUm6Qyw8W8jud";
        String pubKey = "010001";
        // 2次AES加密糜芳,得到params
        String params = EncryptTools.encrypt(EncryptTools.encrypt(text, nonce), secKey);
        StringBuffer stringBuffer = new StringBuffer(secKey);
        // 逆置私鑰
        secKey = stringBuffer.reverse().toString();
        String hex = Hex.encodeHexString(secKey.getBytes());
        BigInteger bigInteger1 = new BigInteger(hex, 16);
        BigInteger bigInteger2 = new BigInteger(pubKey, 16);
        BigInteger bigInteger3 = new BigInteger(modulus, 16);
        // RSA加密計(jì)算
        BigInteger bigInteger4 = bigInteger1.pow(bigInteger2.intValue()).remainder(bigInteger3);
        String encSecKey = Hex.encodeHexString(bigInteger4.toByteArray());
        // 字符填充
        encSecKey = EncryptTools.zfill(encSecKey, 256);
        // 登錄請(qǐng)求
        Document document = Jsoup.connect("http://music.163.com/weapi/login/").cookie("appver", "1.5.0.75771")
                .header("Referer", "http://music.163.com/").data("params", params).data("encSecKey", encSecKey)
                .ignoreContentType(true).post();
        System.out.println("登錄結(jié)果:" + document.text());
    }

參考資料

網(wǎng)易云音樂登錄信息加密算法詳解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市魄衅,隨后出現(xiàn)的幾起案子耍目,更是在濱河造成了極大的恐慌,老刑警劉巖徐绑,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邪驮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡傲茄,警方通過查閱死者的電腦和手機(jī)毅访,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盘榨,“玉大人喻粹,你說我怎么就攤上這事〔菅玻” “怎么了守呜?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我查乒,道長弥喉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任玛迄,我火速辦了婚禮由境,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蓖议。我一直安慰自己虏杰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布勒虾。 她就那樣靜靜地躺著纺阔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪修然。 梳的紋絲不亂的頭發(fā)上州弟,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音低零,去河邊找鬼。 笑死拯杠,一個(gè)胖子當(dāng)著我的面吹牛掏婶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播潭陪,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雄妥,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了依溯?” 一聲冷哼從身側(cè)響起老厌,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎黎炉,沒想到半個(gè)月后枝秤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慷嗜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年淀弹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庆械。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡薇溃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缭乘,到底是詐尸還是另有隱情沐序,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站策幼,受9級(jí)特大地震影響邑时,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜垄惧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一刁愿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧到逊,春花似錦铣口、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至铜靶,卻和暖如春叔遂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背争剿。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國打工已艰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚕苇。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓哩掺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親涩笤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嚼吞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,105評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)蹬碧,斷路器舱禽,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 用過很多播放器,之前一直是酷我恩沽,偶爾QQ誊稚。但是網(wǎng)易云音樂出來后毅然變成了他的忠實(shí)用戶。精確推薦和樂評(píng)都很贊罗心!安利了...
    聽城閱讀 2,434評(píng)論 1 5
  • 一層層片吊,全是你。 大大小小协屡,甜美如一俏脊。 呆在自己捏造的快樂里。 以為肤晓,你與自己只有一層之隔爷贫。 可认然,拿去外殼, 越來...
    藍(lán)羽魚閱讀 231評(píng)論 0 1
  • 作者:花菜 編輯:花菜 草莓小姐又失戀了毕骡,她說很累,她說找一個(gè)對(duì)的人真的好難岩瘦。 這句話好耳熟未巫,很久前的我,也經(jīng)常把...
    愛情菜閱讀 835評(píng)論 7 17