爬取网易云音乐热门评论
Requests库
json库
直接用requests.get()方法把网页爬下来做成文本找不到我们要的热评,说明它藏在其他文件中。目标就是把它找到。后面发现是网页post一个data信息才能得到热评。我们用requests.post()方法把data提交上去,就可以获得我们要找的热评了。
代码:
import requests
import json
def get_url(url):
number=url.split('=')[1] #切段,取第二个
headers={"Referer": "https://music.163.com/song?id=4466775",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"}
#直接爬取音乐界面然后下载界面文档找不到我们要的评论,说明热评在网页加载的另一个页面
#放慢网页的加载速度不要缓存,一旦找到我们要的评论就停止网页加载,打开审查元素在Network找到XHR或者DOC文档看看有没有我们要的热评
#这两个参数是向网页提交的信息,要提交信息才能获取到评论文件。
params= "QJU++Me16JeaiaCfF/Ks4zjCJ92PWQpNAO+kHmZIVZVk3EBpNjDE6ligmuDN7" \
"D7cympdIuoFzoII0exm6+NS1zBFMTwmf+owCoZWGxd6fiS4/wJmiWbZZhSlqDEp" \
"W6eXQ1nQvZcopQIRyIG9/5vLhm2LBaXtHb1u6MEXyag3gqmnBm59Jto7aALWCMZcVxLC"
encSecKey="4714164e076f437b0418d119298" \
"67f1a0ef2ccb28d2a430f6c0b5cbe466cc3dc8671e128d89" \
"0f6f096570ee0b537ebf14a05cf95794f42f67864bb66cd5955201070b93c4260b5cc93ac" \
"38819124f6a751f06ed3fce33c78538b9821b177c94db08f80bf7e1fdb5cd719080a" \
"c15f2a2292ded49cf594b278cf7ba78867bcb659"
#把刚才网页上的data的写成字典形式
data={"params":params,
"encSecKey":encSecKey }
#不要把网址写死,不同歌曲对应的id不一样
target_url = "https://music.163.com/weapi/v1/resource/comments/R_SO_4_{}?csrf_token=".format(number)
req = requests.post(target_url, headers=headers, data=data)
return req
def main():
url=input("请输入歌曲网址:")
content=get_url(url)
comment_json= json.loads(content.text)#json.loads后返回的是字典
result=comment_json['hotComments']
with open("F:/爬虫汇总/网易云音乐热评/hot_comments.txt", 'w', encoding='utf-8') as f:
for each in result:
f.write(each['user']['nickname']+'\n\n')
f.write(each['content']+'\n')
f.write('---------------------------\n')#write里面的参数是字符串
if __name__=="__main__":
main()
运行后,把歌曲对应网址输入。运行成功后效果如下,打开文本
其他歌曲热评只要打开对于歌曲页面,把对应网址复制输入就行了。