怎么用Python打造批量下載視頻并能可視化下載進(jìn)度的下載器

這篇文章主要講解了“怎么用Python打造批量下載視頻并能可視化下載進(jìn)度的下載器”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“怎么用Python打造批量下載視頻并能可視化下載進(jìn)度的下載器”吧!

十多年的夷陵網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)整合營(yíng)銷(xiāo)推廣的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整夷陵建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“夷陵網(wǎng)站設(shè)計(jì)”,“夷陵網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

【一、項(xiàng)目背景】

平時(shí)宅在家的我們最?lèi)?ài)做的事莫過(guò)于追劇了,但是有時(shí)候了,網(wǎng)絡(luò)原因,可能會(huì)讓你無(wú)網(wǎng)可上,這個(gè)時(shí)候那些好看的電視劇和電影自然是無(wú)法觀看了,本期我們要講的就是怎樣下載這些視頻。

【二、項(xiàng)目目標(biāo)】

通過(guò)Python程序?qū)λ信d趣的視頻進(jìn)行批量下載,正好小編近期看到一些不錯(cuò)的視頻,因?yàn)橄胪沧糠较蜃?,但又苦于重新學(xué)習(xí)太復(fù)雜,有沒(méi)有簡(jiǎn)單點(diǎn)的,之前好像有什么e4a但是要學(xué)易語(yǔ)言就放棄了,于是乎在茫茫網(wǎng)絡(luò)發(fā)現(xiàn)了一個(gè)小眾的編程語(yǔ)言---裕語(yǔ)言。好家伙,不說(shuō)了,趕緊下載,盤(pán)它。

【三、項(xiàng)目實(shí)施】

采用sublime text 3 編寫(xiě)程序,先看看效果:

怎么用Python打造批量下載視頻并能可視化下載進(jìn)度的下載器

怎么用Python打造批量下載視頻并能可視化下載進(jìn)度的下載器

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

接下來(lái),由小編我為大家展現(xiàn)程序的具體實(shí)現(xiàn)步驟。

【四、實(shí)現(xiàn)步驟】

1.分析網(wǎng)頁(yè)結(jié)構(gòu)

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

怎么用Python打造批量下載視頻并能可視化下載進(jìn)度的下載器

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

發(fā)現(xiàn)視頻全都在a標(biāo)簽里面,因?yàn)檫@個(gè)頁(yè)面的視頻比較多,所以我們繼續(xù)分析頁(yè)面,發(fā)現(xiàn)一個(gè)神奇的事情。哈哈,原來(lái)所有的視頻都在class為videoDown的a標(biāo)簽里,有了這個(gè)重要的信息就什么都好辦了。

#解析頁(yè)面  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標(biāo)簽  for y in res:          ab.append('http://v.u00.cn:93'+y.attrs['href'])         #將獲取到的視頻URL地址添加到列表中          return ab #返回所有視頻地址的列表

這樣就輕輕松松拿到了頁(yè)面所有的視頻地址,怎么樣,是不是超級(jí)簡(jiǎn)單了。

2.下載文件

因?yàn)槲覀冎v的是批量下載,所以在此之前需要先了解單個(gè)下載,當(dāng)然,單個(gè)下載是很耗費(fèi)時(shí)間,而且系統(tǒng)資源利用率太低。

我們來(lái)看看這個(gè)下載函數(shù)如何實(shí)現(xiàn):

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

無(wú)非就是一些常用的字符串分隔以及文件操作罷了,不過(guò)此種因?yàn)楸容^單一,下載多個(gè)文件就行不通了,所以一般只要不是大批量下載,這種方法就夠了。

然后在給他套一個(gè)函數(shù)用來(lái)簡(jiǎn)化他的啟動(dòng)之路。

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

最后調(diào)用主函數(shù)main,輕輕松松完成單個(gè)文件下載。

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

在下載視頻的時(shí)候如果我們一下子把所有的資源你都拿出來(lái)放進(jìn)CPU讀取,那么很快就會(huì)崩潰,所以我們需要設(shè)置一個(gè)緩沖,等他緩沖區(qū)滿了然后拿出來(lái)讀取,聽(tīng)起來(lái)好像挺抽象,讓我們一起來(lái)看一下吧。

怎么用Python打造批量下載視頻并能可視化下載進(jìn)度的下載器

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

圖中所示即為視頻大小值和請(qǐng)求范圍的值。

1.獲取視頻大小

def download(url, file_name): \#下載視頻  urllib3.disable_warnings()  rep=requests.get(url,headers=headers)  head=rep.headers  rep=requests.get(url,headers=headers)  head=rep.headers \#獲取請(qǐng)求頭字典  length=head.get('Content-Length') \#獲取到視頻的大小,單位是字節(jié) 若想讓他以MB為單位,則需除以?xún)蓚€(gè)1024  file_size = int(length) \#視頻大小用int轉(zhuǎn)換  if os.path.exists(file_name): \#判斷文件名是否存在          first_byte = os.path.getsize(file_name) \#獲取文件名大小  else:          first_byte = 0  if 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'   } \#設(shè)置請(qǐng)求頭,標(biāo)明請(qǐng)求范圍

2.配置進(jìn)度條

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

3.添加緩沖

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

4.構(gòu)建下載視頻并顯示進(jìn)度條函數(shù)

def fd(): \#下載并顯示進(jìn)度條  global x  x=1  for 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.啟動(dòng)程序

Fd()

【五.總結(jié)】

批量下載視頻文件是一個(gè)不可多得的技術(shù),程序?qū)懙牟⒉粔蚝?,比如程序沒(méi)有添加多線程,多進(jìn)程,協(xié)程,也沒(méi)有異步操作,可能是因?yàn)樽约罕容^懶吧,哈哈哈。

不過(guò)也挺簡(jiǎn)單,多線程就是threading.Thread 順便加鎖  Lock,也可以用多進(jìn)程multiprocessing中的Process或者進(jìn)程池Pool,或者協(xié)程genvent,或者異步asynic

感謝各位的閱讀,以上就是“怎么用Python打造批量下載視頻并能可視化下載進(jìn)度的下載器”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)怎么用Python打造批量下載視頻并能可視化下載進(jìn)度的下載器這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

當(dāng)前標(biāo)題:怎么用Python打造批量下載視頻并能可視化下載進(jìn)度的下載器
網(wǎng)頁(yè)URL:http://www.muchs.cn/article18/ijssgp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、動(dòng)態(tài)網(wǎng)站、軟件開(kāi)發(fā)、網(wǎng)站改版移動(dòng)網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作