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