最近喜歡看看視頻,於是到處逛啊逛的,終於還是來到了這個世界上最大的視頻平臺,不愧是它,質量杠杠的! 心動不如行動 ,咱們直接用python開整,好看的視頻都給它下載下來,完事了喊上表弟一起看~ 表弟: 不多嗶嗶,咱們開始吧~ 環境模塊 開發環境 這裡咱們安裝Python3 ,推薦3.6-3.8,編輯 ...
最近喜歡看看視頻,於是到處逛啊逛的,終於還是來到了這個世界上最大的視頻平臺,不愧是它,質量杠杠的!
心動不如行動 ,咱們直接用python開整,好看的視頻都給它下載下來,完事了喊上表弟一起看~
表弟:
不多嗶嗶,咱們開始吧~
環境模塊
開發環境
這裡咱們安裝Python3 ,推薦3.6-3.8,編輯器還是pycharm,但是可以下載pycharm 2021 ,新版本自帶漢化插件,直接安裝就可以漢化了。
對於不會英語的兄弟們來說簡直是福音吶!
模塊
這裡本次用到的兩個第三方模塊需要pip安裝一下
requests # 數據請求模塊 tqdm #進度條配置 # Python學習交流群:815624229
沒有軟體,不會安裝軟體,不會安裝模塊、報錯了等等,或者Python相關學習資料、代碼、視頻、解答等等,都在上面的裙了。
淺淺的給大家展示一下爬完的一個視頻
表弟:呸,就一個?就這就這?能不能多放點!
實現步驟
pa蟲的步驟講了這麼多遍,不知道各位記住了沒有~
首先咱咱們先打開目標網頁然後去搜索自己喜歡的視頻
至於怎麼進這個網站,且聽我慢慢道來~
聲明一下,我只說怎麼去下載,至於怎麼進這個網站,這個不是我能教的,大家自行百度,我有點慌~
emmm~
我們還是不說這個了,說回搜索咱們喜歡的視頻,比如
咳咳,不要在意我搜的啥,這不是重點!
然後我們以這個視頻為例,咱們還是素一點。
咱們點開視頻,然後按 F12 打開開發者工具,然後刷新網頁,去找到我們的數據包內容。
刷新之後它會慢慢的載入數據包,咱們可以在裡面找到很多內容,我就不詳細寫了,大家可以看我這個視頻,詳細的步驟都錄下來了。
視頻地址:【Python爬取YouTube視頻】
為啥不寫了呢,主要是寫太多了,大家也不喜歡看,只喜歡看代碼,害~
代碼展示
導入模塊
這是所有需要用到的模塊,前面沒講需要安裝的都是內置模塊,不需要安裝。
import requests # 數據請求模塊 import re # 正則表達式模塊 import json # 數據類型處理模塊 from tqdm import tqdm #進度條配置 import os # 處理文件和目錄
發送請求獲取數據
headers = { 'cookie': 'VISITOR_INFO1_LIVE=9qZVrzB27uI; PREF=f4=4000000&tz=Asia.Shanghai; _ga=GA1.2.621834420.1648121145; _gcl_au=1.1.1853038046.1648121145; NID=511=Zc1APdmEbCD-iqVNVgI_vD_0S3LVI3XSfl-wUZEvvMU2MLePFKsQCaKUlUtchHSg-kWEVMGOhWUbxpQMwHeIuLjhxaslwniMh1OsjVfmOeTfhpwcRYpMgqpZtNQ7qQApY21xEObCvIez6DCMbjRhRQ5P7siOD3X87QX0CFyUxmY; OTZ=6430350_24_24__24_; GPS=1; YSC=0E115KqM_-I; GOOGLE_ABUSE_EXEMPTION=ID=d02004902c3d0f4d:TM=1648620854:C=r:IP=47.57.243.77-:S=YmZXPW7dxbu83bDuauEpXpE; CONSISTENCY=AGDxDeNysJ2boEmzRP4v6cwgg4NsdN4-FYQKHCGhA0AeW1QjFIU1Ejq1j8l6lwAc6c-pYTJiSaQItZ1M6QeI1pQ3wictnWXTOZ6_y8EKlt0Y_JdakwW6srR39-NLuPgSgXrXwtS0XTUGXpdnt4k3JjQ', 'referer': 'https://www.youtube.com/results?search_query=jk%E7%BE%8E%E5%A5%B3', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36' } url = 'https://www.youtube.com/watch?v=ImoXcSpR_io' response = requests.get(url=url, headers=headers) print(response.text)
匹配json數據
json_str = re.findall('var ytInitialPlayerResponse = (.*?);var', response.text)[0]
json字元串轉變為字典
json_data = json.loads(json_str)
提取視頻鏈接
video_url = json_data['streamingData']['adaptiveFormats'][0]['url']
提取音頻鏈接
audio_url = json_data['streamingData']['adaptiveFormats'][-2]['url']
提取標題
title = json_data['videoDetails']['title']
替換掉標題當中的空格
title = title.replace(' ', '')
替換掉標題當中的不合法字元
title = re.sub(r'[\/:|?*"<>]', '', title) print(video_url) print(audio_url) print(title)
向視頻鏈接發送請求
video = requests.get(video_url, stream=True)
獲取視頻大小
file_size = int(video.headers.get('Content-Length'))
初始化進度條大小
video_pbar = tqdm(total=file_size)
開始保存視頻
with open(f'{title}.mp4', mode='wb') as f: # 把視頻分成 1024 * 1024 * 2 為等分的大小 進行遍歷 for video_chunk in video.iter_content(1024*1024*2): # 寫入數據 f.write(video_chunk) # 更新進度條 video_pbar.set_description(f'正在下載{title}視頻中......') # 更新進度條長度 video_pbar.update(1024*1024*2) # 下載完畢 video_pbar.set_description('下載完成!') # 關閉進度條 video_pbar.close()
音頻同理
audio = requests.get(audio_url, stream=True) file_size = int(audio.headers.get('Content-Length')) audio_pbar = tqdm(total=file_size) with open(f'{title}.mp3', mode='wb') as f: for audio_chunk in audio.iter_content(1024*1024*2): f.write(audio_chunk) audio_pbar.set_description(f'正在下載{title}音頻中......') audio_pbar.update(1024*1024*2) audio_pbar.set_description('下載完成!') audio_pbar.close()
使用FFmpeg進行合併
def merge(title): ffmpeg = r'D:\Download\ffmpeg\bin\ffmpeg.exe -i ' + title + '.mp4 -i ' + title + '.mp3 -acodec copy -vcodec copy ' + title + '-out.mp4' os.popen(ffmpeg) merge(title)
兄弟們趕緊試試吧!
記得點贊收藏評論,愛你喲!