电竞比分网-中国电竞赛事及体育赛事平台

分享

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

 Four兄 2019-08-29
 

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

  1. 小文件下載

  2. 大文件下載

  3. 批量下載

python 小文件下載

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

Python小文件下載流程

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

Python文件下載

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

python 大文件下載

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

流式分塊下載

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

Python大文件下載流程

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

python大文件下載

Python 批量文件下載

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

  1. 如果某個(gè)請(qǐng)求堵塞,整個(gè)隊(duì)列都會(huì)被堵塞

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

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

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

pip install aiohttp

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

python異步批量下載

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

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

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

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多