首先打开网易云音乐,打开你想爬取的评论的页面,然后f12,发现是能找到评论的 

,然后我们打开网页源代码,搜索评论,发现源代码中并没有评论的相关信息,这表明评论信息是js代码,是加密了的动态页面,一般我们爬取的是静态的,即源代码当中能直接找到的我们能看见的数据,这时候用正则表达式匹配则可以爬取成功,而动态页面,我们得在XHR里捕获它的请求信息

这里抓包有个小技巧,即比对它的id,这样子就不用每个都去看一下是不是我们要的包

 

 可以看到这是一个post请求,而Resquest URL则是我们要的数据的地址,点开preview,可以发现我们要的数据就在hotComments里面

 

 怎么爬呢,既然是个post请求,我们可以用模拟浏览器向服务器发送请求的方法,来解析页面,这样做就可以直接用它加密即表单里的数据,而不是先去解密再解析页面,如图

然后利用json来获取我们想要的键值对关系的评论数据就可以了。

下面是我的源代码:

#encoding:utf8
import requests
import re
import json
url = "https://music.163.com/weapi/v1/resource/comments/R_SO_4_545922868?csrf_token="
headers = {
'Host':"music.163.com",
'Origin':'https://music.163.com',
'Referer':'https://music.163.com/song?id=545922868',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
}
data = {
'params':"+C7GdwabX3V3pnW5pJGQWQcfOByDUKz5qrT24HkmK7EKYuDq4gNyM4S3UvKx7+s68ANR7n7yAU0MNsZWVwNOKljmd3HABOHiyiFEEXslfOqv4c5p49h8XnH/fnFF+dBIqLsJQjjWhvrfXx66bIWOBB1J+I9SH0Y+ixRt/fIT6LegMOGfytqGk83BTouH3N9O",
'encSecKey':"c4a66b9b1d8c7accc431eb3c85e502acc0a4a7c3e7fe01c9018f2a3b3f0c98fa91fbf2764ca7b00a3d386fa6457bf621f4f0e63930805d12c7d5a9bff9176ad2c2f580256ec043e3a307c35105ba91a0d60a4abec672758ab45f14044af122b457298b37e7530280a51f7905e82eb0bff9fa7397c76e839080401f28903565be",
}
html = requests.post(url,headers=headers,data=data).text

comments = json.loads(html)
comments = comments['hotComments']
for i in comments:
print(i['commentId'],i['content'])

 

 

 这是我爬取的结果: