參數(shù) | 說明 |
---|---|
pn | 請求的頁碼 |
rn | 每次請求返回的數(shù)據(jù)量 |
_format | 請求返回的數(shù)據(jù)格式 |
tab | 請求的標(biāo)簽類型 |
那么,相應(yīng)的代碼可以改為:
import requests page = 1 keyword = 'xxxxx' # xxxxx為搜索的關(guān)鍵字 url = 'https://haokan.baidu.com/videoui/page/search?pn=%drn=10_format=jsontab=videoquery=%s'%(page,keyword) res = requests.get(url) data = res.json()
至此,視頻搜索部分的分析算是告于段落了。
視頻下載的思路也很清晰,只需進(jìn)入播放視頻的界面找到相應(yīng)的視頻原文件地址即可。
小手一點(diǎn),我們便進(jìn)到了一個(gè)視頻的播放界面,我們可以發(fā)現(xiàn)其URL很有規(guī)律:它通過一個(gè)vid的參數(shù)來指向的相應(yīng)視頻。
右鍵視頻播放頁面查看源碼(或者通過右鍵視頻檢查元素也可),我們可以找到視頻播放的src,其對應(yīng)的正則表達(dá)式為:
p = 'video class="video" src=(.*?)>'
那么,我們可以定義一個(gè)函數(shù)來解析視頻的原文件地址:
def get_videoUrl(vid): ''' 提取視頻信息中的視頻源地址 ''' res = requests.get('https://haokan.baidu.com/v?vid=%s'%vid) html = res.text videoUrl = re.findall('video class="video" src=(.*?)>',html)[0] return videoUrl
輸入視頻的id參數(shù),將返回視頻的真正文件地址。有了視頻的地址,要下載視頻便是信手拈來:
def download_video(vid): ''' 下載視頻文件 ''' savePath = 'xxxxx.mp4' # 定義存儲(chǔ)的文件名 videoUrl = get_videoUrl(vid) # 獲取視頻下載地址 res = requests.get(videoUrl) with open(savePath,'wb') as f: f.write(res.content)
至此,我們已經(jīng)可以根據(jù)關(guān)鍵字搜索相關(guān)的視頻,并且可以把視頻下載到本地了。這也意味著:關(guān)于本次視頻下載爬蟲的介紹也就結(jié)束了,剩下的就是根據(jù)自己實(shí)際需求對代碼進(jìn)行包裝即可。
這里提供一個(gè)我自己的代碼,僅供參考:
# ============================================================================= # 好看視頻_v0.1 # ============================================================================= import re import os import time import queue import requests import threading import pandas as pd class Haokan: def __init__(self): self.url = 'https://haokan.baidu.com/videoui/page/search?pn=%drn=20_format=jsontab=videoquery=%s' self.headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', 'TE': 'Trailers', } self.savaPath = './videos' # 視頻存儲(chǔ)路徑 def get_info(self,keywords,page): ''' 搜索關(guān)鍵字,獲取相關(guān)視頻信息 ''' self.result = [] # 相關(guān)視頻信息 for p in range(1,page+1): res = requests.get(self.url%(p,keywords),headers=self.headers) data = res.json()['data']['response'] videos = data['list'] self.result.extend(videos) print('"第%d頁"爬取完成!'%(p+1)) self.result = pd.DataFrame(self.result) self.result.to_excel('%s.xlsx'%keywords,index=False) # 定義隊(duì)列,用于多線程下載視頻 self.url_queue = queue.Queue() for vid,url in zip(self.result['vid'],self.result['url']): self.url_queue.put((vid,url)) def get_videoUrl(self,url): ''' 提取視頻信息中的視頻源地址 ''' res = requests.get(url,headers=self.headers) html = res.text videoUrl = re.findall('video class="video" src=(.*?)>',html)[0] return videoUrl def download_video(self,videoId,videoUrl): ''' 下載視頻文件 ''' # 如果視頻存儲(chǔ)目錄不存在則創(chuàng)建 if not os.path.exists(self.savaPath): os.mkdir(self.savaPath) res = requests.get(videoUrl,headers=self.headers) with open('%s/%s.mp4'%(self.savaPath,videoId),'wb') as f: f.write(res.content) def run(self): while not self.url_queue.empty(): t_s = time.time() vid,url = self.url_queue.get() try: video_url = self.get_videoUrl(url) self.download_video(vid,video_url) except: print('"%s.mp4"下載失敗!'%vid) continue t_e = time.time() print('"%s.mp4"下載完成!(用時(shí)%.2fs)'%(vid,t_e-t_s)) if __name__ == "__main__": keywords = '多啦A夢' page = 1 # 爬取頁數(shù),每頁20條信息 t_s = time.time() haokan = Haokan() haokan.get_info(keywords,page) N_thread = 3 # 線程數(shù) thread_list = [] for i in range(N_thread): thread_list.append(threading.Thread(target=haokan.run)) for t in thread_list: t.start() for t in thread_list: t.join() t_e = time.time() print('任務(wù)完成!(用時(shí)%.2fs)'%(t_e-t_s))
運(yùn)行代碼,可以看到小頻頻全都來到我的碗里了😍~
今天分享的視頻下載算是最基礎(chǔ)的了,它宛如一位慈祥的老奶奶,慈眉善目,面帶笑容。它沒有各種繁瑣的反爬機(jī)制(甚至連headers都不進(jìn)行驗(yàn)證),而且數(shù)據(jù)返回的格式也是極其友好的,就連視頻格式也顯得如此的溫柔。
我相信在“她”的陪伴下,我們可以走好學(xué)習(xí)爬蟲的第一步??v使日后我們還將面臨IP驗(yàn)證、參數(shù)驗(yàn)證、驗(yàn)證碼、行為檢測、瑞數(shù)系統(tǒng)等等諸多反爬考驗(yàn),也許還需應(yīng)對視頻格式轉(zhuǎn)換等挑戰(zhàn)。
但是,請記住kimol君將始終陪伴在你們身邊~
最后,感謝各位大大的耐心閱讀,咋們下次再會(huì)~
以上就是用python制作個(gè)視頻下載器的詳細(xì)內(nèi)容,更多關(guān)于python 制作視頻下載器的資料請關(guān)注腳本之家其它相關(guān)文章!
標(biāo)簽:河池 重慶 漢中 德宏 廊坊 東莞 臨汾 長春
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《用python制作個(gè)視頻下載器》,本文關(guān)鍵詞 用,python,制作,個(gè),視頻下載,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。