欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何實(shí)現(xiàn)python爬蟲爬取視頻時(shí)實(shí)現(xiàn)實(shí)時(shí)進(jìn)度條顯示

 更新時(shí)間:2022年06月21日 14:50:55   作者:knighthood2001  
這篇文章主要介紹了如何實(shí)現(xiàn)python爬蟲爬取視頻時(shí)實(shí)現(xiàn)實(shí)時(shí)進(jìn)度條顯示,在爬取并下載網(wǎng)頁上的視頻的時(shí)候,我們需要實(shí)時(shí)進(jìn)度條,這可以幫助我們更直觀的看到視頻的下載進(jìn)度。文章圍繞主題展開更多內(nèi)容,需要的小伙伴可以參考一下

前言:

在爬取并下載網(wǎng)頁上的視頻的時(shí)候,我們需要實(shí)時(shí)進(jìn)度條,這可以幫助我們更直觀的看到視頻的下載進(jìn)度。

一、全部代碼展示

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  # 單次請(qǐng)求最大值
    # response.headers['content-length']得到的數(shù)據(jù)類型是str而不是int
    content_size = int(response.headers['content-length'])  # 文件總大小
    data_count = 0  # 當(dāng)前已傳輸?shù)拇笮?
    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)
            # 已經(jīng)下載的文件大小
            data_count = data_count + len(data)
            # 實(shí)時(shí)進(jìn)度條進(jìn)度
            now_jd = (data_count / content_size) * 100
            # %% 表示%
            print("\r [%s%s] %d%% " % (done_block * '█', ' ' * (50 - 1 - done_block), now_jd), end=" ")

注:上面的url已過期,需要各位自己去找網(wǎng)頁上的視頻url

二、解釋

1.with closing

我們?cè)谌粘Wx取文件資源時(shí),經(jīng)常會(huì)用到with open() as f:的句子。

但是使用with語句的時(shí)候是需要條件的,任何對(duì)象,只要正確實(shí)現(xiàn)了上下文管理,就可以使用with語句,實(shí)現(xiàn)上下文管理是通過__enter____exit__這兩個(gè)方法實(shí)現(xiàn)的。

with用法(沒有實(shí)現(xiàn)上下文管理)

class Door():
    def open(self):
        print('Door is opened')
    def close(self):
        print('Door is closed')
with Door() as d:
    d.open()
    d.close()

 結(jié)果報(bào)錯(cuò)了:

with用法(實(shí)現(xiàn)上下文管理)

用__enter____exit__實(shí)現(xiàn)了上下文管理

class Door():
    def open(self):
        print('Door is opened')
    def close(self):
        print('Door is closed')
with Door() as d:
    d.open()
    d.close()

 結(jié)果沒報(bào)錯(cuò):

closing用法(完美解決上述問題)

一個(gè)對(duì)象沒有實(shí)現(xiàn)上下文,我們就不能把它用于with語句。這個(gè)時(shí)候,可以用contextlib中的

closing()來把該對(duì)象變?yōu)樯舷挛膶?duì)象。

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()下載視頻(在網(wǎng)頁中)

2.文件流stream

想象一下,如果把文件讀取比作向池子里抽水,同步會(huì)阻塞程序,異步會(huì)等待結(jié)果,如果池子非常大呢?

因此有了文件流,它就好比你一邊抽一邊取,不用等池子滿了再用,

所以對(duì)于一些大型文件(幾個(gè)G的視頻)一般會(huì)用到這個(gè)參數(shù)。(對(duì)小型文件也可以使用)

3.response.headers['content-length']

這表示獲取文件的總大小,但是它得到的結(jié)果的數(shù)據(jù)類型是str而不是int,因此需要進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換。

4.response.iter_content()

該方法一般用于從網(wǎng)上下載文件和網(wǎng)頁(需要用到requests.get(url))

其中chunk_size表示單次請(qǐng)求最大值。

5.\r和%

\r表示回車(回到行首)

%是一種占位符

而對(duì)于%%,第一個(gè)%起到了轉(zhuǎn)義的作用,使結(jié)果輸出為百分號(hào)%

三、結(jié)果展示

四、總結(jié)

我之前看了許多的進(jìn)度條,這些進(jìn)度條都能動(dòng),但是滿足不了根據(jù)文件內(nèi)容進(jìn)行加載(里面的參數(shù)要么都定死了,要么就與文件大小無關(guān)),不能做到真正的交互功能,這次的進(jìn)度條就很好的展示了,大家可以去試試?。?/p>

這次下載視頻展示進(jìn)度條是爭(zhēng)對(duì)一個(gè)url,大家可以將它加到你的爬蟲的循環(huán)中,這樣就能在爬每個(gè)視頻的時(shí)候展示實(shí)時(shí)進(jìn)度條了!!

到此這篇關(guān)于如何實(shí)現(xiàn)python爬蟲爬取視頻時(shí)實(shí)現(xiàn)實(shí)時(shí)進(jìn)度條顯示的文章就介紹到這了,更多相關(guān)python爬取顯示進(jìn)度條內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python繪制3D圖形

    Python繪制3D圖形

    這篇文章主要介紹了Python繪制3D圖形,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值
    2018-05-05
  • Python+Pygame實(shí)戰(zhàn)之俄羅斯方塊游戲的實(shí)現(xiàn)

    Python+Pygame實(shí)戰(zhàn)之俄羅斯方塊游戲的實(shí)現(xiàn)

    俄羅斯方塊,作為是一款家喻戶曉的游戲,陪伴70、80甚至90后,度過無憂的兒時(shí)歲月,它上手簡單能自由組合、拼接技巧也很多。本文就來用Python中的Pygame模塊實(shí)現(xiàn)這一經(jīng)典游戲,需要的可以參考一下
    2022-12-12
  • python如何處理衛(wèi)星云圖獲取亮溫值

    python如何處理衛(wèi)星云圖獲取亮溫值

    這篇文章主要介紹了python如何處理衛(wèi)星云圖獲取亮溫值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • DataFrame.to_excel多次寫入不同Sheet的實(shí)例

    DataFrame.to_excel多次寫入不同Sheet的實(shí)例

    今天小編就為大家分享一篇DataFrame.to_excel多次寫入不同Sheet的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python中的os.path.join使用方法詳解

    python中的os.path.join使用方法詳解

    這篇文章主要介紹了python中的os.path.join使用方法詳解,os.path.join用于將多個(gè)路徑拼接為一個(gè)完整路徑,經(jīng)常使用,但沒了解過細(xì)節(jié),直到今天遇到一個(gè)令人疑惑的問題,最后發(fā)現(xiàn)是os.path.join的問題,借此機(jī)會(huì),記錄下os.path.join的用法,需要的朋友可以參考下
    2023-11-11
  • python3 cookbook中常遇問題解答

    python3 cookbook中常遇問題解答

    本文主要介紹了python3 cookbook中常遇問題解答,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python圖像填充與裁剪/resize的實(shí)現(xiàn)代碼

    python圖像填充與裁剪/resize的實(shí)現(xiàn)代碼

    這篇文章主要介紹了python圖像填充與裁剪/resize,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • Python編程使用有限狀態(tài)機(jī)識(shí)別地址有效性

    Python編程使用有限狀態(tài)機(jī)識(shí)別地址有效性

    這篇文章主要介紹了Python編程中如何使用有限狀態(tài)機(jī)識(shí)別地址有效性,如何識(shí)別一個(gè)地址是否有效,確切的講,如何編程識(shí)別一個(gè)中國地址是否有效
    2021-09-09
  • 簡單介紹Python中的RSS處理

    簡單介紹Python中的RSS處理

    這篇文章主要介紹了簡單介紹Python中的RSS處理,本文來自于IBM官方開發(fā)者技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • 基于python計(jì)算滾動(dòng)方差(標(biāo)準(zhǔn)差)talib和pd.rolling函數(shù)差異詳解

    基于python計(jì)算滾動(dòng)方差(標(biāo)準(zhǔn)差)talib和pd.rolling函數(shù)差異詳解

    這篇文章主要介紹了基于python計(jì)算滾動(dòng)方差(標(biāo)準(zhǔn)差)talib和pd.rolling函數(shù)差異詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06

最新評(píng)論