X-Requested-With:“XMLHttpRequest”:
https://blog.csdn.net/muzico425/article/details/102735413
https://www.runoob.com/xml/xml-http.html
https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest
通過該案例主要還是學習一下X-Requested-With:"XMLHttpRequest"的相關知識
(因為之前在這個網站上通過歌名來扒歌曲id的時候,請求頭里沒帶X-Requested:"XMLHttpRequest"就一直給我返回錯誤的數據(很直白的返回一句話你這個請求有貓膩啊。。。)
首先介紹一下AJAX請求:
AJAX請求在開發中的主要作用:在不刷新整個頁面的情況下更新部分頁面內容。
然后介紹XMLHttpRequest (XHR)
通俗的說,AJAX請求就是通過XMLHttpRequest對象(XHR在所有現代瀏覽器都會內建)來發送的,由此實現異步數據交換,使得網頁可以在不重新加載的情況下更新部分內容
這里再講講異步數據交換:
舉個例子刷微博,當我在刷一個微博的帖子時,我要看這個帖子評論是不是要點開評論區?
對。當我點開評論區加載評論時就會觸發一個AJAX請求來異步請求的微博后端評論數據,此時因為該請求是異步的,網頁不會進行重載,所以我不用等到后端的數據返回就可以給執行給這條微博點贊/轉發的操作,有著很舒適沖浪的體驗。
這就是異步通信的好處讓網站不需要等待每一個任務完成再執行下一個任務,而是可以同時進行多個任務。
那么X-Requested-With:"XMLHttpRequest"的作用是什么呢?
答:X-Requested-With用來標識HTTP請求的來源,那么在請求中帶有X-Requested-With:"XMLHttpRequest"的標識就可以告訴網站后端當前接收請求是通過XHR對象發起的AJAX請求,可以驗證請求的來源和類型,防止爬蟲請求成功獲取到后臺數據。
import json
import timeimport requestsX咸Y魚H = tb0336576862
url = 'https://music.liuzhijin.cn/'xiandata = {'input':'開門紅','filter':'name','type':'netease' ,'page':1,
}
headers = {
"Host": "music.liuzhijin.cn",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36 Edg/123.0.0.0",
"X-Requested-With":"XMLHttpRequest",
"Origin":"https://music.liuzhijin.cn",
"Referer":"https://music.liuzhijin.cn/?name=%E5%BC%80%E9%97%A8%E7%BA%A2&type=netease"
}def fetch_info():result = []for i in range(1): # 提取查看一共需要多少頁res = requests.post(url, data=data, headers=headers)if res.status_code == 200:info = json.loads(res.text)print(f'success {i}')print(info)result.append(info)else:print(f'fail {i}')time.sleep(3) # 休息,減少服務器壓力return resultprint(fetch_info())