按照不同的情況,python下載文件可以分為三種:
python 小文件下載流程:使用request.get請求鏈接,返回的內(nèi)容放置到變量r中,然后將r寫入到你想放的地方。 ![]() 以下載上述流程圖為例子: ![]() 運行完畢后,它將會被保存到當(dāng)前文件夾的new文件夾里。 python 大文件下載我們在小文件下載的時候,是將文件內(nèi)容暫存到變量里,大家想想,下載大文件的時候還這樣做會有什么問題 流式分塊下載原理:一塊一塊地將內(nèi)存寫入到文件中,以避免內(nèi)存占用過大。 ![]() 當(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標記,能夠切換的函數(shù)用async標記。比如下載異步批量下載兩個圖片的代碼如下: ![]() 注意: img = await session.get(url) 我們的文章到此就結(jié)束啦,如果你希望我們今天的Python 教程,請持續(xù)關(guān)注我們,如果對你有幫助,麻煩在下面點一個贊/在看哦 |
|
來自: Four兄 > 《python爬蟲》