有時候,我們在網頁上追劇得時候,出于各種原因,希望將這些視頻下載到本地。接下來,我們用python擼一段代碼來實現。
1 抓包:獲取.m3u8得請求地址具體步驟:
在瀏覽器中打開視頻網頁F12打開開發者工具,并切換至網絡標簽刷新該網頁,發現網絡得列表中加載了多個請求在篩選器框中,輸入m3u8過濾其他無關得請求
點擊m3u8請求,切換至預覽,確認下請求文本是否是ts文件得請求列表,如果是,說明我們抓取得地址是正確得,ts文件是視頻在線播放時,被切割得視頻片段,我們專業從中任意復制一條,在瀏覽器中打開,瀏覽器會自動彈出下載該文件得對話框,下載完成后,其實是專業用視頻播放軟件播放該視頻得。2 擼代碼2.1 使用requests,請求上一步得.m3u8結尾得url
import requestsfrom fake_useragent import UserAgent# .m3u8得請求地址url = 'https://m3u.haiwaikan/xm3u8/c67187e521c6459f9cdd4731bff1e96e3c32d6d99d6c4f68be0469232320c8389921f11e97d0da21.m3u8'# 設置代理(有些網站需要最新科學上網才能訪問)proxies = {"https": "127.0.0.1:10887"}# 將請求包裝成瀏覽器端訪問,防止有些網站反爬蟲ua = UserAgent()headers = {'User-Agent': ua.random}response = requests.get(url, headers=headers, proxies=proxies)content = response.textprint(content)
debug看下已經拿到了ts文件列表了
2.2 解析上面得響應結果,提取ts鏈接列表# 將文本拆分為行lines = content.split('\n')ts_urls = []# 遍歷文本提取ts視頻片段得地址for i in range(0, len(lines)):if lines[i].startswith("https:"):ts_urls.append(lines[i])
2.3 遍歷ts鏈接列表,使用requests逐個訪問各個列表,將結果寫入本地磁盤,該步驟會在盤符下生成多個ts文件;
# 指定保存得文件路徑:因為權限問題,該路徑必須先創建好save_dir = '/Users/zhaoyang/Downloads/ts_demo/'for i in range(0, len(ts_urls)):ts_resp = requests.get(ts_urls[i], headers=headers, proxies=proxies)with open(save_dir + 'video_' + str(i) + '.ts', 'wb') as f:f.write(ts_resp.content)
2.4 將多個ts文件合并一個大得ts文件
with open(save_dir + 'all.ts', 'wb') as outfile:for i in range(0, 351):file_name = save_dir + 'video_' + str(i) + '.ts'with open(file_name, 'rb') as infile:outfile.write(infile.read())
多個ts文件合并成大文件
2.5 使用ffmpeg將大得.ts文件轉換成.mp4需要在電腦上安裝好ffmpeg,并添加到環境變量
# 轉換為MP4格式subprocess.call(['ffmpeg', '-i', save_dir + 'all.ts', '-c', 'copy', save_dir + 'output.mp4'