日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

用Python打造批量下载视频并能可视化下载进度的炫酷下载器

發布時間:2024/1/1 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用Python打造批量下载视频并能可视化下载进度的炫酷下载器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方“Python爬蟲與數據挖掘”,進行關注

回復“書籍”即可獲贈Python從入門到進階共10本電子書

吾日三省吾身:為人謀而不忠乎?與朋友交而不信乎?傳不習乎?

大家好,我是Python進階者,今天給大家整點好玩的,一起來看看吧~

【一、項目背景】

平時宅在家的我們最愛做的事莫過于追劇了,但是有時候了,網絡原因,可能會讓你無網可上,這個時候那些好看的電視劇和電影自然是無法觀看了,本期我們要講的就是怎樣下載這些視頻。

【二、項目目標】

通過Python程序對所感興趣的視頻進行批量下載,正好小編近期看到一些不錯的視頻,因為想往安卓方向走,但又苦于重新學習太復雜,有沒有簡單點的,之前好像有什么e4a但是要學易語言就放棄了,于是乎在茫茫網絡發現了一個小眾的編程語言---裕語言。好家伙,不說了,趕緊下載,盤它。

【三、項目實施】

采用sublime text 3 編寫程序,先看看效果:

C:\Users\Administrator\Desktop\232.jpg

接下來,由小編我為大家展現程序的具體實現步驟。

【四、實現步驟】

1.分析網頁結構

老樣子,審查元素定位,如下圖:

C:\Users\Administrator\Desktop\1212.jpg

發現視頻全都在a標簽里面,因為這個頁面的視頻比較多,所以我們繼續分析頁面,發現一個神奇的事情。哈哈,原來所有的視頻都在class為videoDown的a標簽里,有了這個重要的信息就什么都好辦了。

#解析頁面def parser():ab=[]rep=requests.get('http://v.u00.cn:93/iappce.htm#sp',timeout=5,headers=headers)rep.encoding='utf-8'soup=BeautifulSoup(rep.text,'html.parser')res=soup.find_all('a',class_='videoDown')#尋找所有class為videoDown的a標簽for y in res:ab.append('http://v.u00.cn:93'+y.attrs['href'])#將獲取到的視頻URL地址添加到列表中return ab #返回所有視頻地址的列表

這樣就輕輕松松拿到了頁面所有的視頻地址,怎么樣,是不是超級簡單了。

2.下載文件

因為我們講的是批量下載,所以在此之前需要先了解單個下載,當然,單個下載是很耗費時間,而且系統資源利用率太低。

我們來看看這個下載函數如何實現:

#下載函數def down(y,x):print('------下載第',str(x),'課-------')ss=str(y.split('.')[3:4]) \#截取文件名sa=ss.replace('[','').replace(']','')\#替換文件名中的特殊符號ree=requests.get(y)with open('%d.%s.mp4'%(x,sa),'wb') as f:f.write(ree.content) \#保存文件

無非就是一些常用的字符串分隔以及文件操作罷了,不過此種因為比較單一,下載多個文件就行不通了,所以一般只要不是大批量下載,這種方法就夠了。

然后在給他套一個函數用來簡化他的啟動之路。

def main():for y in range(len(parser())):down(parser()[y],y) \#下載main()

最后調用主函數main,輕輕松松完成單個文件下載。

3.獲取文件大小并給下載文件添加緩沖

在下載視頻的時候如果我們一下子把所有的資源你都拿出來放進CPU讀取,那么很快就會崩潰,所以我們需要設置一個緩沖,等他緩沖區滿了然后拿出來讀取,聽起來好像挺抽象,讓我們一起來看一下吧。

C:\Users\Administrator\Desktop\4343.jpg

圖中所示即為視頻大小值和請求范圍的值。

1.獲取視頻大小

def download(url, file_name): \#下載視頻urllib3.disable_warnings()rep=requests.get(url,headers=headers)head=rep.headersrep=requests.get(url,headers=headers)head=rep.headers \#獲取請求頭字典length=head.get('Content-Length') \#獲取到視頻的大小,單位是字節 若想讓他以MB為單位,則需除以兩個1024file_size = int(length) \#視頻大小用int轉換if os.path.exists(file_name): \#判斷文件名是否存在first_byte = os.path.getsize(file_name) \#獲取文件名大小else:first_byte = 0if first_byte \>= file_size:return file_size \#返回文件大小header = {"Range": "bytes=%s-%s" % (first_byte, file_size),'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'} \#設置請求頭,標明請求范圍

2.配置進度條

pbar = tqdm( \#配置進度條模塊,設置文件大小,文件字節數,文件的進度total=file_size, initial=first_byte,unit='B', unit_scale=True, desc=url.split('/')[-1])#關于tqdm 具體用法大家可以百度tqdm模塊。

3.添加緩沖

with closing(requests.get(url, headers=header, stream=True)) as req: #關閉連接with open(file_name,'wb') as f: \#打開文件for chunk in req.iter_content(chunk_size=1024\*2): \#設置緩沖if chunk:pbar.set_description("【正在下載視頻 %s】"%str(f.name))f.write(chunk) \#寫入文件pbar.update(1024) \#更新當前進度條pbar.close() \#關閉進度條return file_size \#返回文件大小

4.構建下載視頻并顯示進度條函數

def fd(): \#下載并顯示進度條global xx=1for y in parser():print('----正在下載',x,'課-----')ss=str(y.split('.')[3:4])sa=ss.replace('[','').replace(']','') \#文件名download(y, "{}.{}.mp4".format(str(x),sa)) \#下載print('----完成下載',x,'課-----')x+=1

5.啟動程序

Fd() 【五.總結】

批量下載視頻文件是一個不可多得的技術,程序寫的并不夠好,比如程序沒有添加多線程,多進程,協程,也沒有異步操作,可能是因為自己比較懶吧,哈哈哈。

不過也挺簡單,多線程就是threading.Thread 順便加鎖 Lock,也可以用多進程multiprocessing中的Process或者進程池Pool,或者協程genvent,或者異步asynic

-------------------?End?-------------------

往期精彩文章推薦:

  • 手把手教你利用Python輕松拆分Excel為多個CSV文件

  • 手把手教你4種方法用Python批量實現多Excel多Sheet合并

  • 手把手教你用Python爬取百度搜索結果并保存

歡迎大家點贊,留言,轉發,轉載,感謝大家的相伴與支持

想加入Python學習群請在后臺回復【入群

萬水千山總是情,點個【在看】行不行

/今日留言主題/

隨便說一兩句吧~

總結

以上是生活随笔為你收集整理的用Python打造批量下载视频并能可视化下载进度的炫酷下载器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。