亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

Python爬蟲(chóng)之網(wǎng)易云音樂(lè)歌曲下載

enrecul101 / 3629人閱讀

摘要:爬蟲(chóng)之網(wǎng)易云音樂(lè)下載目標(biāo)用根據(jù)網(wǎng)易云音樂(lè)的,下載音樂(lè),保存到本地格式可以下載歌曲的范圍所有能夠聽(tīng)的歌曲配置基礎(chǔ)模塊可選可選這是哈希函數(shù)如和和各種加密算法,,,等的集合。

Python爬蟲(chóng)之網(wǎng)易云音樂(lè)下載 目標(biāo)

用Python根據(jù)網(wǎng)易云音樂(lè)的ID,下載音樂(lè),保存到本地MP3格式

可以下載歌曲的范圍:所有能夠聽(tīng)的歌曲
配置基礎(chǔ)

Python 3.5

模塊

pycrypto

base64

requests

json

sys(可選)

progressbar(可選)

pycrypto
這是哈希函數(shù)(如SHA256RIPEMD160)和各種加密算法(AES,DES,RSA,ElGamal等)的集合。主要是用來(lái)加密解密,為何要用這個(gè)呢,稍后分析
安裝
pip install pycrypto
base64

python 自帶的模塊,主要是配合pycrypto模塊使用

requests、json

requests主要用來(lái)發(fā)送網(wǎng)絡(luò)請(qǐng)求, json主要用于解析網(wǎng)絡(luò)請(qǐng)求的response

分析

為了避免麻煩,我們選擇網(wǎng)頁(yè)版的網(wǎng)易云音樂(lè)而不用客戶端的,省去抓包的麻煩
我們隨便選擇一首歌(這里選擇:一千零一夜 )然后打開(kāi)網(wǎng)頁(yè),得到如下界面:

然后打開(kāi)瀏覽器網(wǎng)絡(luò)面板,點(diǎn)擊播放按鈕,然后查看網(wǎng)絡(luò)請(qǐng)求,如下:

一共發(fā)送了四個(gè)網(wǎng)絡(luò)請(qǐng)求,仔細(xì)一點(diǎn),我們發(fā)現(xiàn)了一個(gè)有趣的請(qǐng)求,就是上圖最后一個(gè),帶有.mp3后綴的那個(gè),很明顯,這里是將一千零一夜這首歌緩存了下來(lái),復(fù)制該網(wǎng)絡(luò)請(qǐng)求到瀏覽器地址欄打開(kāi),然后瀏覽器就開(kāi)始下載一千零一夜這首歌。到此,好像前面提的所謂的目標(biāo)完成了,但是我不開(kāi)心,身為一個(gè)開(kāi)發(fā)人員,這么沒(méi)有技術(shù)含量的東西,是不是可以考慮用技術(shù)去實(shí)現(xiàn)呢。能不能輸入一個(gè)歌曲的ID,然后就把歌曲下回來(lái)呢。
我們播放多幾首歌曲,很容易發(fā)現(xiàn),每一首歌曲都會(huì)有一個(gè)獨(dú)立的鏈接,仔細(xì)看看這個(gè)鏈接(http://m10.music.126.net/2018...),顯然是經(jīng)過(guò)處理的,這個(gè)處理有可能是前端直接處理的,也有可能是后端處理的(是不是說(shuō)了等于白說(shuō)。。。),后端處理會(huì)有多種情況,其中一種就是另一個(gè)網(wǎng)絡(luò)請(qǐng)求返回來(lái)對(duì)應(yīng)的東西,反正網(wǎng)絡(luò)請(qǐng)求不多,我們先看看網(wǎng)咯請(qǐng)求,一看嚇一跳,還真蒙著了,上圖中第一個(gè)網(wǎng)絡(luò)請(qǐng)求返回來(lái)的數(shù)據(jù)

再看一下請(qǐng)求的組成

只要模擬這個(gè)請(qǐng)求,就可以得到歌曲的鏈接,只要得到鏈接就能下載歌曲。在該請(qǐng)求的參數(shù)中,params以及encSecKey都是一個(gè)經(jīng)過(guò)加密的數(shù)據(jù),在反復(fù)分析點(diǎn)擊播放按鈕的事件后,得到JavaScript進(jìn)行了如下操作

var bPc2x = window.asrsea(JSON.stringify(j4n), buv7o(["流淚", "強(qiáng)"]), buv7o(Tg9X.md), buv7o(["愛(ài)心", "女孩", "驚恐", "大笑"]));
            e4i.data = k4o.cE5J({
                params: bPc2x.encText,
                encSecKey: bPc2x.encSecKey
            })

其中,window.asrsea函數(shù)代碼如下

!function() {
    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,
    window.ecnonasr = e
}();

由上得知,window.asrsea一共傳遞了四個(gè)參數(shù)(假設(shè)為window.asrsea(a, b, c, d)),而這四個(gè)參數(shù)中,只有 a是一個(gè)跟歌曲id相關(guān)的參數(shù),其他三個(gè)都是一個(gè)常量

b = "010001";
c = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"
d = "0CoJUm6Qyw8W8jud"

再研究window.asrsea的代碼,發(fā)現(xiàn)請(qǐng)求的兩個(gè)參數(shù)params以及encSecKey都在這里加密了,其中params經(jīng)過(guò)了兩次AES加密,第一次加密的時(shí)候,傳入了兩個(gè)參數(shù),一個(gè)是a,一個(gè)是d,第二個(gè)加密的兩個(gè)參數(shù),第一個(gè)是第一次加密的結(jié)果,第二個(gè)是一個(gè)16位的隨機(jī)字符串,因?yàn)槭且粋€(gè)隨機(jī)的字符串,所以我們可以隨便用一個(gè)16位的字符串就行了,由于這里這個(gè)隨機(jī)的字符串固定了,那第二個(gè)參數(shù)encSecKey就是一個(gè)固定的值
至此,我們的分析完成,也得到了需要的信息

Python實(shí)現(xiàn)

Python想要模擬請(qǐng)求,那就需要進(jìn)行AES加密,因此我們就用到了開(kāi)始所說(shuō)的pycrypto模塊

from Crypto.Cipher import AES
import base64


def aes_encrypt(text, key):
    iv = "0102030405060708"
    pad = 16 - len(text) % 16
    text = text + pad * chr(pad)
    encryptor = AES.new(key, AES.MODE_CBC, iv)
    result = encryptor.encrypt(text)
    result_str = base64.b64encode(encrypt_text)
    return result_str

QQ交流群: 173318043
項(xiàng)目地址:lmissy.cn
如果本文對(duì)你有所幫助,請(qǐng)點(diǎn)個(gè)贊,這是我努力下去的無(wú)限動(dòng)力,謝謝(??ω??)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/41241.html

相關(guān)文章

  • 小白都懂的Python爬蟲(chóng)網(wǎng)易音樂(lè)下載

    摘要:完整代碼如下正在下載根據(jù)網(wǎng)易云歌曲的直接下載歌曲上安裝爬取網(wǎng)易云歌曲源碼地址 首發(fā)知乎:https://zhuanlan.zhihu.com/p/... 目標(biāo) 偶然的一次機(jī)會(huì)聽(tīng)到了房東的貓的《云煙成雨》,瞬間迷上了這慵懶的嗓音和學(xué)生氣的歌詞,然后一直去循環(huán)聽(tīng)她們的歌。然后還特意去刷了動(dòng)漫《我是江小白》,好期待第二季... 我多想在見(jiàn)你,哪怕匆匆一眼就別離... 好了,不說(shuō)廢話了。這次...

    SoapEye 評(píng)論0 收藏0
  • uhost部署爬蟲(chóng)下載網(wǎng)易音樂(lè)到us3上

    摘要:首先從上拉取項(xiàng)目然后依次安裝以下依賴之后配置的以下字段公共空間名稱不加后綴私有空間名稱不加后綴二選一本地文件名上傳文件在空間中的名稱一切配置完成之后開(kāi)始使用,方法如下按提示輸入歌曲名稱下載歌曲效果展示下載之后的歌曲可以在文件夾中查看首先從git上拉取項(xiàng)目git clone https://github.com/money666-sxy/msc_crawler然后依次安裝以下依賴pip3 in...

    Tecode 評(píng)論0 收藏0
  • selenium實(shí)戰(zhàn)-同步網(wǎng)易音樂(lè)歌單到qq音樂(lè)

    摘要:對(duì)于這次的爬蟲(chóng)來(lái)說(shuō),由于網(wǎng)易云音樂(lè)以及音樂(lè)網(wǎng)頁(yè)中大部分元素都是使用渲染生成的,因此選擇使用來(lái)完成這次的腳本。可以發(fā)現(xiàn)網(wǎng)易云音樂(lè)的手機(jī)版歌單地址是?,F(xiàn)在已經(jīng)支持網(wǎng)易云音樂(lè)與音樂(lè)歌單的互相同步。 本文主要介紹selenium在爬蟲(chóng)腳本的實(shí)際應(yīng)用。適合剛接觸python,沒(méi)使用過(guò)selenium的童鞋。(如果你是老司機(jī)路過(guò)的話,幫忙點(diǎn)個(gè)star吧) 項(xiàng)目地址 https://github.c...

    dailybird 評(píng)論0 收藏0
  • 爬蟲(chóng) - 收藏集 - 掘金

    摘要:在這之前,還是有必要對(duì)一些概念超輕量級(jí)反爬蟲(chóng)方案后端掘金前言爬蟲(chóng)和反爬蟲(chóng)日益成為每家公司的標(biāo)配系統(tǒng)。 爬蟲(chóng)修煉之道——從網(wǎng)頁(yè)中提取結(jié)構(gòu)化數(shù)據(jù)并保存(以爬取糗百文本板塊所有糗事為例) - 后端 - 掘金歡迎大家關(guān)注我的專(zhuān)題:爬蟲(chóng)修煉之道 上篇 爬蟲(chóng)修煉之道——編寫(xiě)一個(gè)爬取多頁(yè)面的網(wǎng)絡(luò)爬蟲(chóng)主要講解了如何使用python編寫(xiě)一個(gè)可以下載多頁(yè)面的爬蟲(chóng),如何將相對(duì)URL轉(zhuǎn)為絕對(duì)URL,如何限速,...

    1fe1se 評(píng)論0 收藏0
  • 首次公開(kāi),整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<