def AES_encrypt(text, key):
pad = 16 - len(text) % 16
text = text + pad * chr(pad)
encryptor = AES.new(key, AES.MODE_CBC, "0102030405060708")
encrypt_text = encryptor.encrypt(text)
encrypt_text = base64.b64encode(encrypt_text)
return encrypt_text
f_key = "0CoJUm6Qyw8W8jud"
text = "{\"rid\":\"R_SO_4_32785700\",\"offset\":\"20\",\"total\":\"true\",\"limit\":\"20\",\"csrf_token\":\"\"}"
rs = AES_encrypt(text, f_key)
params = AES_encrypt(str(rs)[2:-1], "FwtEYduOXlNEHbLP")
这里解释一下,text是我进过N次调试得出的,因为在请求评论之前,text有好几个值来验证其他的东西,这里我大概理解了一下text的含义,这里我们只要知道offset是偏移量,limit是每次请求多少条,比如你请求前二十条则offset=0,limit = 20,我上面的是请求20-40条。
data = {
'params': params,
'encSecKey': encSecKey
}
headers = {
'Accept-Language':"zh-CN,zh;q=0.9,en;q=0.8",
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36',
'Cookie': 'appver=1.5.0.75771',
'Referer': 'http://music.163.com/'
}
url = "https://music.163.com/weapi/v1/resource/comments/R_SO_4_32785700?csrf_token="
raw = requests.post(url,headers=headers, data=data)print(raw.json())
def getComment(raw, comments):
comment = comments
contents = raw["comments"]
for content in contents:
part = []
content.pop('beReplied')
part.append(content["user"]['nickname'])
part.append(content["content"])
part.append(content["time"])
comment.append(part)
return comment
def getAll(id,total,limit):
comment = []
for i in range(0, int(total), 100):
raw = getRawData.getRawJson(id, i.__str__(), limit)
comment = getComment(raw, comment)
return comment
def getCSV(id,total, csv_name):
comment = getAll(id, total, '100')
df = pd.DataFrame(data=comment,
columns=['user', 'content', 'time'])
df['content'].to_csv(csv_name+'.csv', encoding='utf-8')
def gen_pic(csv_name):
with open(csv_name+'.csv', 'r', encoding='utf-8') as f:
content = f.read()
font = r'C://Windows//Fonts/simkai.ttf'
bg = np.array(Image.open("background/bg.png"))
pic = WordCloud(collocations=False, font_path=font, background_color="white", max_words=800, mask=bg, max_font_size=300, random_state=42).generate(content)
plt.imshow(bg, cmap=plt.cm.gray)
image_colors = ImageColorGenerator(bg)
plt.imshow(pic.recolor(color_func=image_colors))
plt.axis("off")
plt.show()