最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用python制作個視頻下載器

 更新時間:2021年02月01日 14:53:32   作者:不正經(jīng)的kimol君  
這篇文章主要介紹了如何用python制作個視頻下載器,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

前言

某個夜深人靜的夜晚,夜微涼風(fēng)微揚,月光照進我的書房~
當(dāng)我打開文件夾以回顧往事之余,驚現(xiàn)許多看似雜亂的無聊代碼。我拍腿正坐,一個想法油然而生:“生活已然很無聊,不如再無聊些叭”。
于是,我決定開一個專題,便稱之為kimol君的無聊小發(fā)明。
妙…啊~~~

眾所周知,視頻是一個學(xué)習(xí)新姿勢知識的良好媒介。那么,如何利用爬蟲更加方便快捷地下載視頻呢?本文將從數(shù)據(jù)包分析到代碼實現(xiàn)來進行一個相對完整的講解。

一、爬蟲分析

本次選取的目標視頻網(wǎng)站為某度旗下的好看視頻:

https://haokan.baidu.com

1.視頻搜索

進入主頁后,我們可以看到一個搜索框歷歷在目:

當(dāng)我們點擊搜索按鈕之后,會出現(xiàn)與關(guān)鍵字(ps.這里要考,大家仔細看😋)相匹配的視頻,我們需要做的便是抓包來分析其中的請求數(shù)據(jù)。

關(guān)于抓包工具,可以選擇三方工具(如Fiddler或者Burpsuit等),當(dāng)然也可以選擇瀏覽器自帶的調(diào)試工具(在瀏覽器中按F12即可打開)。
在這里我選擇了后者,打開F12調(diào)試工具,選擇網(wǎng)絡(luò):

在點擊搜索按鈕之后我們可以看到相應(yīng)的網(wǎng)絡(luò)請求出現(xiàn)在下面的工具框中:

通過簡單的查找之后我們可以很容易地發(fā)現(xiàn)對應(yīng)的搜索請求(紅框標出部分),其對應(yīng)的地址為:

https://haokan.baidu.com/videoui/page/search?query=kimol君666

那么,我們通過requests庫來模擬該請求,便可實現(xiàn)搜索視頻的功能:

import requests
res = requests.get('https://haokan.baidu.com/videoui/page/search?query=xxxxx')# xxxxx表示你需要搜索的關(guān)鍵字

注:這里不需要用到請求頭headers,但是不能一概而論。是否需要請求頭要根據(jù)具體網(wǎng)站分析哦~

你沒有看錯,我只用了2行代碼便實現(xiàn)了視頻網(wǎng)站的搜索功能。有時候,爬蟲就是這么簡單😉!
在得到請求后,接下來我們要對這個請求返回的數(shù)據(jù)進行分析,同樣是在F12調(diào)試工具中點擊右側(cè)的響應(yīng)便可以看到請求的響應(yīng):

很顯然,這里返回的是一個HTML格式的數(shù)據(jù),我們只需要通過re庫或是bs4庫等將我們需要的數(shù)據(jù)提取出來即可。至此,關(guān)于視頻搜索的分析基本算是完成了。
然而!細心的小伙伴會發(fā)現(xiàn),我們現(xiàn)在可以獲得搜索結(jié)果,但是沒辦法選擇頁面呀。對嚯~那咋辦呀?

同樣,我們繼續(xù)抓包分析不就可以了嘛~ 我倒要看看你是怎么翻頁的。果然,下滑鼠標之后我們得到了新的請求:

其請求地址變?yōu)榱耍?/p>

https://haokan.baidu.com/videoui/page/search?pn=2&rn=10&_format=json&tab=video&query=kimol君666

請求多了pn、rn、_format、tab等參數(shù),而且請求返回的格式也變?yōu)榱薐SON格式(豈不美哉?更方便提取想要的數(shù)據(jù)了)。通過簡單測試可以知道,這些參數(shù)分別代表:

參數(shù) 說明
pn 請求的頁碼
rn 每次請求返回的數(shù)據(jù)量
_format 請求返回的數(shù)據(jù)格式
tab 請求的標簽類型

那么,相應(yīng)的代碼可以改為:

import requests
page = 1
keyword = 'xxxxx' # xxxxx為搜索的關(guān)鍵字
url = 'https://haokan.baidu.com/videoui/page/search?pn=%d&rn=10&_format=json&tab=video&query=%s'%(page,keyword)
res = requests.get(url)
data = res.json()

至此,視頻搜索部分的分析算是告于段落了。

2.視頻下載

視頻下載的思路也很清晰,只需進入播放視頻的界面找到相應(yīng)的視頻原文件地址即可。
小手一點,我們便進到了一個視頻的播放界面,我們可以發(fā)現(xiàn)其URL很有規(guī)律:它通過一個vid的參數(shù)來指向的相應(yīng)視頻。

右鍵視頻播放頁面查看源碼(或者通過右鍵視頻檢查元素也可),我們可以找到視頻播放的src,其對應(yīng)的正則表達式為:

p = '<video class="video" src=(.*?)>'

那么,我們可以定義一個函數(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' # 定義存儲的文件名
 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ù)自己實際需求對代碼進行包裝即可。

二、我的代碼

這里提供一個我自己的代碼,僅供參考:

# =============================================================================
# 好看視頻_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=%d&rn=20&_format=json&tab=video&query=%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' # 視頻存儲路徑
 
 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)
 # 定義隊列,用于多線程下載視頻
 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):
 '''
 下載視頻文件
 '''
 # 如果視頻存儲目錄不存在則創(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"下載完成!(用時%.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ù)完成!(用時%.2fs)'%(t_e-t_s))
 

運行代碼,可以看到小頻頻全都來到我的碗里了😍~

寫在最后

今天分享的視頻下載算是最基礎(chǔ)的了,它宛如一位慈祥的老奶奶,慈眉善目,面帶笑容。它沒有各種繁瑣的反爬機制(甚至連headers都不進行驗證),而且數(shù)據(jù)返回的格式也是極其友好的,就連視頻格式也顯得如此的溫柔。

我相信在“她”的陪伴下,我們可以走好學(xué)習(xí)爬蟲的第一步??v使日后我們還將面臨IP驗證、參數(shù)驗證、驗證碼、行為檢測、瑞數(shù)系統(tǒng)等等諸多反爬考驗,也許還需應(yīng)對視頻格式轉(zhuǎn)換等挑戰(zhàn)。
但是,請記住kimol君將始終陪伴在你們身邊~

最后,感謝各位大大的耐心閱讀,咋們下次再會~

以上就是用python制作個視頻下載器的詳細內(nèi)容,更多關(guān)于python 制作視頻下載器的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python日志模塊logging基本用法分析

    Python日志模塊logging基本用法分析

    這篇文章主要介紹了Python日志模塊logging基本用法,結(jié)合實例形式分析了日志模塊logging的功能、常用函數(shù)、相關(guān)使用技巧與注意事項,需要的朋友可以參考下
    2018-08-08
  • Python 調(diào)用API發(fā)送郵件

    Python 調(diào)用API發(fā)送郵件

    這篇文章主要介紹了Python 調(diào)用API發(fā)送郵件的方法,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-03-03
  • 100?個?Python?小例子(練習(xí)題四)

    100?個?Python?小例子(練習(xí)題四)

    這篇文章主要給大家分享100?個?Python?小例子,前文分享了一二三,本文的四十最后一篇了,這篇就把100道python小練習(xí)全分享完了,感興趣的小伙伴也可以去練習(xí)前幾期內(nèi)容,洗碗給這幾篇文章給你的學(xué)習(xí)帶來幫助
    2022-01-01
  • Python利用atexit模塊實現(xiàn)優(yōu)雅處理程序退出

    Python利用atexit模塊實現(xiàn)優(yōu)雅處理程序退出

    Python的atexit模塊提供了一種方便的方式來注冊這些退出時執(zhí)行的函數(shù),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Python3如何在服務(wù)器打印資產(chǎn)信息

    Python3如何在服務(wù)器打印資產(chǎn)信息

    這篇文章主要介紹了Python3如何在服務(wù)器打印資產(chǎn)信息,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • python模擬實現(xiàn)斗地主發(fā)牌

    python模擬實現(xiàn)斗地主發(fā)牌

    這篇文章主要為大家詳細介紹了python代碼模擬實現(xiàn)斗地主發(fā)牌,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • Python Flask框架開發(fā)之運用SocketIO實現(xiàn)WebSSH方法詳解

    Python Flask框架開發(fā)之運用SocketIO實現(xiàn)WebSSH方法詳解

    Socket.IO本是一個面向?qū)崟rweb應(yīng)用的JavaScript庫,現(xiàn)在已成為擁有眾多語言支持的Web即時通訊應(yīng)用的框架。這篇文章主要介紹了Python 運用SocketIO實現(xiàn)WebSSH方法
    2022-10-10
  • python中json、字典的區(qū)別以及相互轉(zhuǎn)換方法

    python中json、字典的區(qū)別以及相互轉(zhuǎn)換方法

    在Python中我們經(jīng)常會用到JSON格式的數(shù)據(jù),而將JSON格式轉(zhuǎn)化為Python的字典類型是一種常見的操作,這篇文章主要給大家介紹了關(guān)于python中json、字典的區(qū)別以及相互轉(zhuǎn)換方法的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • 淺談Tensorflow加載Vgg預(yù)訓(xùn)練模型的幾個注意事項

    淺談Tensorflow加載Vgg預(yù)訓(xùn)練模型的幾個注意事項

    這篇文章主要介紹了淺談Tensorflow加載Vgg預(yù)訓(xùn)練模型的幾個注意事項說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python數(shù)據(jù)處理詳情

    python數(shù)據(jù)處理詳情

    這篇文章主要介紹了python數(shù)據(jù)處理詳情,文章通過json文件的一個數(shù)據(jù)表展開對主題的詳細說明,具有一定的參考價值需要的小伙伴可以參考一下
    2022-04-04

最新評論

响水县| 太仓市| 高雄市| 清新县| 通辽市| 紫金县| 涞水县| 阳新县| 黄骅市| 宁国市| 巫山县| 达尔| 土默特左旗| 田林县| 大方县| 枝江市| 漳平市| 星子县| 长丰县| 永清县| 锦屏县| 通州市| 凤翔县| 盘锦市| 宁陕县| 鸡西市| 曲麻莱县| 沂水县| 抚顺县| 六盘水市| 苗栗市| 呼和浩特市| 龙里县| 屯门区| 天水市| 炎陵县| 马尔康县| 鹿泉市| 临城县| 邢台市| 自治县|