python网易云爬虫网络技术的意义_13.【代码】网易云音乐评论爬虫 - Python网络爬虫实战...

本文档仅作为视频学习过程中的参考

不可用于非法途径

77e9ebb9b54b2840861ff4cca94eb2ff.png

8b22ab26ef493287a87a82da4f4b89c6.png

import urllib.request

import urllib.parse

import json

import base64

from crypto.Cipher import AES

import codecs

import re

headers = {

"Referer": "http://music.163.com/",

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0",

}

url = "http://music.163.com/weapi/v1/resource/comments/R_SO_4_536624791?csrf_token="

# rid是视频的标志,offset是控制视频翻页的标志

def get_ParamsFirst(rid,offset):

params_first = '{"rid":"' + rid + '","offset":"' + offset + '","total":"false","limit":"20","csrf_token":""}'

return params_first

params_second = "010001"

params_third = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"

params_forth = "0CoJUm6Qyw8W8jud"

# params需要第一个参数和第四个参数

# encSecKey需要第二个和第三个参数,还需要一个随机的16个字符组成的字符串

def aesEncrypt(text, key):

# 偏移量

iv = '0102030405060708'

# 文本

pad = 16 - len(text) % 16

text = text + pad * chr(pad)

encryptor = AES.new(key, 2, iv)

ciphertext = encryptor.encrypt(text)

ciphertext = base64.b64encode(ciphertext)

return ciphertext

def get_params(text,rid,offset):

# 第一个参数

params = aesEncrypt(get_ParamsFirst(rid,offset), params_forth).decode('utf-8')

params = aesEncrypt(params, text)

return params

def rsaEncrypt(pubKey, text, modulus):

'''进行rsa加密'''

text = text[::-1]

rs = int(codecs.encode(text.encode('utf-8'), 'hex_codec'), 16) ** int(pubKey, 16) % int(modulus, 16)

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

def get_encSEcKey(text):

pubKey = params_second

moudulus = params_third

encSecKey = rsaEncrypt(pubKey, text, moudulus)

return encSecKey

rid = re.findall('comments/(.*?)\?',url)[0]

offset = 0

while True:

text = "A"*16

params = get_params(text,rid,str(offset))

encSEcKey = get_encSEcKey(text)

formdata = {

"params":params,

"encSecKey":encSEcKey

}

temp_data = json.loads(urllib.request.urlopen(urllib.request.Request(url=url,data=urllib.parse.urlencode(formdata).encode("utf-8"),headers=headers)).read().decode("utf-8"))["comments"]

length = len(temp_data)

for eve_data in temp_data:

print(eve_data)

if length == 20:

offset = offset + 20

else:

break

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值