爬取网易云音乐热评
问题描述:在爬取网易云歌曲热评的时候,我在打开热评链接的时候,所有歌曲的热评链接都是一样的,这样我怎么区分不同的音乐呢? 如图###看过小甲鱼爬取网易云热评的 应该知道我什么意思
就是在这张图里面 热评在get?csrf_token=这个文件里面 我想读取这个文件里面的热评信息, 但是我发现所有歌曲的这个文件的地址都是一样的,https://music.163.com/weapi/comment/resource/comments/get?csrf_token=
那么我怎么区分不同的歌曲呢?
##代码
import requests
from bs4 import BeautifulSoup
import json
def get_res(url):
headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"}
params='Oh86j23sgDVlk1FaLiEQu7tVD / 5nlf61fbILFPKmNBb3KGm + JnhB6PMvXmGL6Tw7LClxV + am8 + Za7Mf61tsOxCp6mjvvJrBKvrsGVyMmjeAKr2eC0UZSP9BhdkZAFEMsdSDQgoUFpWt + LjY + VOapwrVuCRMu0wQdT7Nrj / V2hZ9M321MoAyJZZOGBDlrhAO / N6ru + u848vM9V68fkbLLpnPVezxgIIUCfNCH8e + hPZ + pPwjfQ + QfLVuTEZ9vvM8GdC + QxdvdK2Eky + LAsrKAhZZtkHdc2FWJItY + qom0B4k ='
encSecKey='ad3aef05c75ce4dc2ec4dc4c98ef0d92e82f9315b7baa7ff80d02125ab2b9c404dd50f2d84ed12d41aa42753ffff33d4f45989a2f8f34aaf1167c21a15db1004c471ccaee5af087a8698c143d33c50c79af9b04f3a0fbfbefc9b2857bb10030a7eeb0f0cc5410381df6eee3f2fe8e48952b031badb8b70363cd92b6a7751cd84'
data={'params':params,"encSecKey":encSecKey}
get_url = 'https://music.163.com/weapi/comment/resource/comments/get?csrf_token='
res = requests.post(get_url,headers=headers,data=data)
return res
def get_com(res):
comments_json = json.loads(res.text)
hot_comments = comments_json["data"]["hotComments"]
print(hot_comments["user"]["nickname"])
with open("text.txt","w",encoding="utf-8") as f:
for each in hot_comments:
f.write(each["user"]["nickname"]+"\n")
f.write(each["content"]+"\n")
f.write("--------------------------------\n")
def main():
#url = 'https://music.163.com/#/song?id=1305364671'
url = input("请输入歌曲链接:")
res = get_res(url)
get_com(res) 补充一下 我在热评的那个网页里发现虽然存储热评信息的地址是一样的 但是params和encSecKey 这两个值是不一样的 我改了这两个值之后 就可以获得这两个值对应的歌曲的热评 这很让人苦恼~~~~ 那怎么去获取每一首歌曲的params和encSecKey 是这种js代码生成的吧,要想找到来源,怕是很难
this.getcdnInfo = function() {
var params = {};
if (gQ1x) {
params.cdnBytes = gQ1x.info.cdnBytes;
params.p2pBytes = gQ1x.info.p2pBytes
} else if (iE2x) {
var bNS6M = iE2x.loadedInfo();
params.cdnBytes = bNS6M.cdnloaded;
params.p2pBytes = bNS6M.p2ploaded
}
return params
}
;
页:
[1]