您好,登錄后才能下訂單哦!
這篇文章主要講解了“python下載文件的三種形式介紹”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“python下載文件的三種形式介紹”吧!
按照不同的情況,python下載文件可以分為三種:
小文件下載
大文件下載
批量下載
流程:使用request.get請求鏈接,返回的內(nèi)容放置到變量r中,然后將r寫入到你想放的地方。
Python小文件下載流程
以下載上述流程圖文件為例子:
Python文件下載
運行完畢后,它將會被保存到當(dāng)前文件夾的new文件夾里。
我們在小文件下載的時候,是將文件內(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大文件下載
所謂批量下載,當(dāng)然不是一個一個文件的下載了,比如說我們要下載百度圖片,如果一個一個下載會出現(xiàn)兩種負面情況:
如果某個請求堵塞,整個隊列都會被堵塞
如果是小文件,單線程下載太慢
我們的解決方案是使用異步策略。如果你會用scrapy框架,那就輕松許多了,因為它結(jié)合了twisted異步驅(qū)動架構(gòu),根本不需要你自己寫異步。不過我們python實用寶典講的可是教程,還是跟大家說一下怎么實現(xiàn)異步下載:
我們需要使用到兩個包,一個是asyncio、一個是aiohttp. asyncio是Python3的原裝庫,但是aiohttp則需要各位使用cmd/Terminal打開,輸入以下命令安裝:
pip install aiohttp
注意asyncio是單進程并發(fā)庫,不是多線程,也不是多進程,單純是在一個進程里面異步(切來切去運行),切換的地方用await標(biāo)記,能夠切換的函數(shù)用async標(biāo)記。比如下載異步批量下載兩個圖片的代碼如下:
Python異步批量下載
注意: img = await session.get(url)
這時候,在你請求第一個圖片獲得數(shù)據(jù)的時候,它會切換請求第二個圖片或其他圖片,等第一個圖片獲得所有數(shù)據(jù)后再切換回來。從而實現(xiàn)多線程批量下載的功能,速度超快,下載超清大圖用這個方法可以一秒一張。
感謝各位的閱讀,以上就是“python下載文件的三種形式介紹”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對python下載文件的三種形式介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。