成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用Python打造批量下載視頻并能可視化下載進度的炫酷下載器

開發 后端
批量下載視頻文件是一個不可多得的技術,程序寫的并不夠好,比如程序沒有添加多線程,多進程,協程,也沒有異步操作.

 

[[393941]]

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

【一、項目背景】

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

【二、項目目標】

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

【三、項目實施】

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

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

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

【四、實現步驟】

1.分析網頁結構

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

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

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

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

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

2.下載文件

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

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

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

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

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

  1. def main(): 
  2.  
  3. for y in range(len(parser())): 
  4.  
  5. down(parser()[y],y) \#下載 
  6.  
  7. main() 

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

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

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

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

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

1.獲取視頻大小

  1. def download(url, file_name): \#下載視頻 
  2.  
  3. urllib3.disable_warnings() 
  4.  
  5. rep=requests.get(url,headers=headers) 
  6.  
  7. head=rep.headers 
  8.  
  9. rep=requests.get(url,headers=headers) 
  10.  
  11. head=rep.headers \#獲取請求頭字典 
  12.  
  13. length=head.get('Content-Length') \#獲取到視頻的大小,單位是字節 
  14. 若想讓他以MB為單位,則需除以兩個1024 
  15.  
  16. file_size = int(length) \#視頻大小用int轉換 
  17.  
  18. if os.path.exists(file_name): \#判斷文件名是否存在 
  19.  
  20.         first_byte = os.path.getsize(file_name) \#獲取文件名大小 
  21.  
  22. else
  23.  
  24.         first_byte = 0 
  25.  
  26. if first_byte \>= file_size: 
  27.  
  28.         return file_size \#返回文件大小 
  29.  
  30. header = {"Range""bytes=%s-%s" % (first_byte, file_size), 
  31.  
  32.         'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 
  33. (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36' 
  34.  
  35.  } \#設置請求頭,標明請求范圍 

2.配置進度條

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

3.添加緩沖

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

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

  1. def fd(): \#下載并顯示進度條 
  2.  
  3. global x 
  4.  
  5. x=1 
  6.  
  7. for y in parser(): 
  8.  
  9.         print('----正在下載',x,'課-----'
  10.  
  11.         ss=str(y.split('.')[3:4]) 
  12.  
  13.         sa=ss.replace('[','').replace(']','') \#文件名 
  14.  
  15.         download(y, "{}.{}.mp4".format(str(x),sa)) \#下載 
  16.  
  17.         print('----完成下載',x,'課-----'
  18.  
  19.         x+=1 

5.啟動程序

  1. Fd() 

【五.總結】

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

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

 

責任編輯:姜華 來源: Python爬蟲與數據挖掘
相關推薦

2022-09-29 11:16:21

Python數據可視化

2021-12-30 12:02:52

Python可視化代碼

2023-12-27 13:45:00

Python進度條代碼

2019-07-26 09:19:32

數據可視化架構

2022-08-17 09:01:16

數據可視化大數據

2018-03-21 12:13:47

工具數據開發

2020-07-06 14:50:36

地圖可視化Java

2024-02-26 12:02:37

Python數據可視化D3blocks

2022-02-14 09:11:17

視頻下載器抖音

2009-07-28 08:43:13

2023-02-27 22:41:44

Python水印短視頻

2021-07-27 09:02:50

Python下載音樂Python基礎

2019-07-01 08:45:00

開發者技能工具

2019-05-20 08:20:40

數據集數據可視化數據

2020-09-07 13:02:22

地球Python代碼

2021-06-10 22:26:53

Python 幾何圖形

2022-08-26 09:15:58

Python可視化plotly

2016-09-02 08:33:46

RxJavaActivity

2021-06-24 13:00:35

微軟開源可視化

2022-04-13 09:01:53

Echart5繪制地圖
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国内精品99| 亚洲一区二区精品视频在线观看 | 亚洲情视频| 国产亚韩| 精品美女久久久 | 91超碰在线观看 | 成人av一区 | 久久午夜国产精品www忘忧草 | 一级片在线观看 | 午夜天堂精品久久久久 | 天天射夜夜操 | 久久国产成人 | 亚洲精品二区 | 免费在线看黄 | 亚洲视频在线看 | 久久国产精品-国产精品 | 亚洲精品18| 国产精品精品久久久久久 | 亚洲午夜视频在线观看 | 欧美一卡二卡在线观看 | 国产一区二区a | 日韩一区不卡 | 中文字幕91 | 亚洲乱码一区二区 | 伊人色综合久久久天天蜜桃 | 一区二区三区四区电影 | 九九热在线观看 | 四虎影院在线播放 | 免费在线观看一区二区 | 精品一区二区三区入口 | 黄色免费网 | 自拍偷拍亚洲欧美 | 精品中文字幕在线观看 | 国产精品久久精品 | 日韩在线欧美 | 九九精品在线 | 91国产视频在线观看 | 亚洲一区亚洲二区 | 亚洲欧美v| 在线色网| 亚洲精品9999久久久久 |