• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python3爬虫实例之网易云音乐爬虫

python 搞代码 4年前 (2022-01-09) 16次浏览 已收录 0个评论

本篇文章给大家带来的内容是Python3爬虫实例之网易云音乐爬虫。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

此次的目标是爬取网易云音乐上指定歌曲所有评论并生成词云

具体步骤:

一:实现JS加密

找到这个ajax接口没什么难度,问题在于传递的数据,是通过js加密得到的,因此需要查看js代码。

通过断掉调试可以找到数据是由core_8556f33641851a422ec534e33e6fa5a4.js?8556f33641851a422ec534e33e6fa5a4.js里的window.asrsea函数加密的。

通过进一步的查找,可以找到下面这个函数:

function() {    // 生成长度为16的随机字符串    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    }    // 实现AES加密    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()    }    // 实现RSA加密    function c(a, b, c) {        var d, e;        return setMaxDigits(131),        d = new RSAKeyPair(b,"",c),        e = encryptedString(d, a)    }    // 得到加密后的结果    function d(d<mark>本文来源gaodaimacom搞#^代%!码&网(</mark>, 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    }}()

因此我们需要用Python实现上面四个函数。第一个生成随机字符串的函数没难度,实现的代码如下:

# 生成随机字符串def generate_random_string(length):    string = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"    # 初始化随机字符串    random_string = ""    # 生成一个长度为length的随机字符串    for i in range(length):        random_string += string[int(floor(random() * len(string)))]    return random_string

第二个是实现AES加密的函数,而用AES加密需要使用Crypto这个库。 如果没有安装这个库的话,需要先安装pycrypto库,然后再安装Crypto库。 在成功安装之后,如果import的时候没有Crypto而只有crypto,先打开Python安装目录下的Lib\site-packages\crypto文件夹,如果里面有Cipher文件夹,就返回到 Lib\site-packages目录下把crypto重命名为Crypto,然后应该就可以成功导入了。

由于AES加密的明文长度必须是16的倍数,因此我们需要对明文进行必要的填充,以满足它的长度是16的倍数,AES加密的模式是AES.MODE_CBC,初始化向量iv='0102030405060708′。

实现AES加密的代码如下:

# AES加密def aes_encrypt(msg, key):    # 如果不是16的倍数则进行填充    padding = 16 - len(msg) % 16    # 这里使用padding对应的单字符进行填充    msg += padding * chr(padding)    # 用来加密或者解密的初始向量(必须是16位)    iv = '0102030405060708'    # AES加密    cipher = AES.new(key, AES.MODE_CBC, iv)    # 加密后得到的是bytes类型的数据    encrypt_bytes = cipher.encrypt(msg)    # 使用Base64进行编码,返回byte字符串    encode_string = base64.b64encode(encrypt_bytes)    # 对byte字符串按utf-8进行解码    encrypt_text = encode_string.decode('utf-8')    # 返回结果    return encrypt_text

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python3爬虫实例之网易云音乐爬虫

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址