<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前言:
在爬取並下載網頁上的視訊的時候,我們需要實時進度條,這可以幫助我們更直觀的看到視訊的下載進度。
from contextlib import closing from requests import get url = 'https://v26-web.douyinvod.com/57cdd29ee3a718825bf7b1b14d63955b/615d475f/video/tos/cn/tos-cn-ve-15/72c47fb481464cfda3d415b9759aade7/?a=6383&br=2192&bt=2192&cd=0%7C0%7C0&ch=26&cr=0&cs=0&cv=1&dr=0&ds=4&er=&ft=jal9wj--bz7ThWG4S1ct&l=021633499366600fdbddc0200fff0030a92169a000000490f5507&lr=all&mime_type=video_mp4&net=0&pl=0&qs=0&rc=ank7OzU6ZnRkNjMzNGkzM0ApNmY4aGU8MzwzNzo3ZjNpZWdiYXBtcjQwLXNgLS1kLTBzczYtNS0tMmE1Xi82Yy9gLTE6Yw%3D%3D&vl=&vr=' with closing(get(url, stream=True)) as response: chunk_size = 1024 # 單次請求最大值 # response.headers['content-length']得到的資料型別是str而不是int content_size = int(response.headers['content-length']) # 檔案總大小 data_count = 0 # 當前已傳輸的大小 with open('檔名.mp4', "wb") as file: for data in response.iter_content(chunk_size=chunk_size): file.write(data) done_block = int((data_count / content_size) * 50) # 已經下載的檔案大小 data_count = data_count + len(data) # 實時進度條進度 now_jd = (data_count / content_size) * 100 # %% 表示% print("r [%s%s] %d%% " % (done_block * '█', ' ' * (50 - 1 - done_block), now_jd), end=" ")
注:上面的url已過期,需要各位自己去找網頁上的視訊url
我們在日常讀取檔案資源時,經常會用到with open() as f:的句子。
但是使用with語句的時候是需要條件的,任何物件,只要正確實現了上下文管理,就可以使用with語句,實現上下文管理是通過__enter__
和__exit__
這兩個方法實現的。
with用法(沒有實現上下文管理)
class Door(): def open(self): print('Door is opened') def close(self): print('Door is closed') with Door() as d: d.open() d.close()
結果報錯了:
用__enter__
和__exit__實現了上下文管理
class Door(): def open(self): print('Door is opened') def close(self): print('Door is closed') with Door() as d: d.open() d.close()
結果沒報錯:
一個物件沒有實現上下文,我們就不能把它用於with
語句。這個時候,可以用contextlib中的
closing()
來把該物件變為上下文物件。
class Door(): def __enter__(self): print('Begin') return self def __exit__(self, exc_type, exc_value, traceback): if exc_type: print('Error') else: print('End') def open(self): print('Door is opened') def close(self): print('Door is closed') with Door() as d: d.open() d.close()
例如:用with語句使用requests中的get(url)
也就是本文中的案例,使用with closing()下載視訊(在網頁中)
想象一下,如果把檔案讀取比作向池子裡抽水,同步會阻塞程式,非同步會等待結果,如果池子非常大呢?
因此有了檔案流,它就好比你一邊抽一邊取,不用等池子滿了再用,
所以對於一些大型檔案(幾個G的視訊)一般會用到這個引數。(對小型檔案也可以使用)
這表示獲取檔案的總大小,但是它得到的結果的資料型別是str而不是int,因此需要進行資料型別轉換。
該方法一般用於從網上下載檔案和網頁(需要用到requests.get(url))
其中chunk_size表示單次請求最大值。
r表示回車(回到行首)
%是一種預留位置
而對於%%,第一個%起到了跳脫的作用,使結果輸出為百分號%
我之前看了許多的進度條,這些進度條都能動,但是滿足不了根據檔案內容進行載入(裡面的引數要麼都定死了,要麼就與檔案大小無關),不能做到真正的互動功能,這次的進度條就很好的展示了,大家可以去試試!!
這次下載視訊展示進度條是爭對一個url,大家可以將它加到你的爬蟲的迴圈中,這樣就能在爬每個視訊的時候展示實時進度條了!!
到此這篇關於如何實現python爬蟲爬取視訊時實現實時進度條顯示的文章就介紹到這了,更多相關python爬取顯示進度條內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45