爬取網易雲音樂熱門評論
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()
運行後,把歌曲對應網址輸入。運行成功後效果如下,打開文本
其他歌曲熱評只要打開對於歌曲頁面,把對應網址複製輸入就行了。