日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

python 小文件下載、大文件下載、異步批量下載 教程

 Four兄 2019-08-29
 

按照不同的情況,python下載文件可以分為三種:

  1. 小文件下載

  2. 大文件下載

  3. 批量下載

python 小文件下載

流程:使用request.get請求鏈接,返回的內(nèi)容放置到變量r中,然后將r寫入到你想放的地方。

Python小文件下載流程

以下載上述流程圖為例子:

Python文件下載

運行完畢后,它將會被保存到當(dāng)前文件夾的new文件夾里。

python 大文件下載

我們在小文件下載的時候,是將文件內(nèi)容暫存到變量里,大家想想,下載大文件的時候還這樣做會有什么問題? 很簡單,如果你的內(nèi)存只有8G,結(jié)果要下載文件卻有10G那么大,那就肯定無法下載成功了。而且本機軟件運行占的內(nèi)存也比較大,如果你的內(nèi)存只有8G,實際上剩余可用的內(nèi)存可能低于2G-4G. 這種情況下怎么下載大文件呢?

流式分塊下載

原理:一塊一塊地將內(nèi)存寫入到文件中,以避免內(nèi)存占用過大。

Python大文件下載流程

當(dāng)設(shè)置了request.get(stream=True)的時候,就是啟動流模式下載,典型特征:在r變量的content被調(diào)用的時候才會啟動下載。代碼如下:

python大文件下載

Python 批量文件下載

所謂批量下載,當(dāng)然不是一個一個文件的下載了,比如說我們要下載百度圖片,如果一個一個下載會出現(xiàn)兩種負面情況:

  1. 如果某個請求堵塞,整個隊列都會被堵塞

  2. 如果是小文件,單線程下載太慢

我們的解決方案是使用異步策略。如果你會用scrapy框架,那就輕松許多了,因為它結(jié)合了twisted異步驅(qū)動架構(gòu),根本不需要你自己寫異步。不過我們python實用寶典講的可是教程,還是跟大家說一下怎么實現(xiàn)異步下載

我們需要使用到兩個包,一個是asyncio、一個是aiohttp. asyncio是Python3的原裝庫,但是aiohttp則需要各位使用cmd/Terminal打開,輸入以下命令安裝:

pip install aiohttp

注意asyncio是單進程并發(fā)庫,不是多線程,也不是多進程,單純是在一個進程里面異步(切來切去運行),切換的地方用await標記,能夠切換的函數(shù)用async標記。比如下載異步批量下載兩個圖片的代碼如下:

python異步批量下載

注意: img = await session.get(url)
這時候,在你請求第一個圖片獲得數(shù)據(jù)的時候,它會切換請求第二個圖片或其他圖片,等第一個圖片獲得所有數(shù)據(jù)后再切換回來。從而實現(xiàn)多線程批量下載的功能,速度超快,下載超清大圖用這個方法可以一秒一張。

我們的文章到此就結(jié)束啦,如果你希望我們今天的Python 教程,請持續(xù)關(guān)注我們,如果對你有幫助,麻煩在下面點一個贊/在看哦有任何問題都可以在下方留言區(qū)留言,我們都會耐心解答的!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多