一、防盜鏈了解
防盜鏈是一種技術手段,主要用于防止其他網站通過直接鏈接的方式使用本網站的資源(如圖片、文件等),從而節省帶寬和服務器資源。當其他網站嘗試直接鏈接到受保護的資源時,服務器會根據設置的規則判斷請求來源,如果發現請求來自未經授權的網站,則拒絕提供資源。二、某視頻網站分析
我們在某視頻網站中隨便打開一個網頁,借助開發者工具尋找視頻的播放鏈接。(1)2024年度回訪:蔡磊堅信努力之后的希望文章中,我們尋得視頻的播放地址為:https://video.pearvideo.com/mp4/short/20241231/cont-1797785-16042954-hd.mp4,并且視頻能夠正常訪問。
(2)但是當我嘗試使用代碼將此視頻鏈接進行抓取時,漸漸的發現了端倪,視頻鏈接并不是固定在網頁中的,而是在點擊播放視頻時加載上去的。
import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
}Link = 'https://www.pearvideo.com/video_1797785'
response = requests.get(url=Link, headers=headers)
print(response.text)
(3)借助前面提到過的爬蟲方法,我在該視頻網站中找到了兩處關鍵點:一方面在瀏覽器地址欄找到了用于構造視頻地址的編號,另一方面找到了數據接口也發現了可用于構造視頻地址的信息。
(4)開始構造視頻地址,但是提示該文章已下線。這其實很明顯,就是一個很容易混淆人的防盜鏈反爬蟲。
import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
}
# 1. 復制接口地址,獲取接口中的srcUrl
Link = 'https://www.pearvideo.com/videoStatus.jsp?contId=1797785&mrd=0.17292585205882616'
response = requests.get(url=Link, headers=headers)
print(response.json())
三、使用 Referer 參數處理防盜鏈
Referer 防盜鏈只需要記住一點:“Referer 就是我來時的路”。我們將 Referer 參數放入到 headers 中。import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36','Referer': 'https://www.pearvideo.com/video_1797785'
}
# 1. 復制接口地址,獲取接口中的srcUrl
Link = 'https://www.pearvideo.com/videoStatus.jsp?contId=1797785&mrd=0.17292585205882616'
response = requests.get(url=Link, headers=headers)
print(response.json())
此視頻網站的防盜鏈我們就成功的突破了。
至于如何再將視頻下載下來,大家可以順著思路繼續探索!
四、視頻下載完整代碼
import requestsarticle_link = 'https://www.pearvideo.com/video_1797785'
video_id = article_link.split('_')[-1]headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36','Referer': article_link
}
# 1. 復制接口地址,獲取接口中的srcUrl和 systemTime
Link = f'https://www.pearvideo.com/videoStatus.jsp?contId={video_id}&mrd=0.17292585205882616'
response = requests.get(url=Link, headers=headers)
json_data = response.json()system_time = json_data['systemTime']
src_url = json_data['videoInfo']['videos']['srcUrl']# 2. 視頻地址拼接構造
video_link = src_url.replace(system_time, f'cont-{video_id}')# 3.視頻下載
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36'
}
response = requests.get(url=video_link, headers=headers)
with open('video_01.mp4', 'wb') as video_file:video_file.write(response.content)
print('視頻下載完成!')