大家好,今天給大家分享一個(gè)使用 Python 下載圖片的幾個(gè)方法杜秸。
也許放仗,平常我們下載一張圖片,直接右擊保存就可以了撬碟,可大家有沒有想過诞挨,如果我們要下載 10000 張圖片呢?可能代碼解決就非常 cool 了呢蛤。廢話少說惶傻,直接開擼。
方法一
from urllib.request import urlretrieve
# 圖片的地址
img_url = 'http://img.mp.itc.cn/upload/20170328/0a4a0b04a20d48faab1a58d920ea0704_th.jpeg'
# 兩個(gè)參數(shù)其障,一個(gè)是圖片地址银室;一個(gè)是圖片名
urlretrieve(img_url, 'hmbb01.png')
這里我用的模塊 urllib
,如果你了解 Python2 就會(huì)知道励翼,Python2 模塊中有一個(gè) urllib2
模塊蜈敢,如今,這個(gè)模塊已經(jīng)被合并到了 urllib
中汽抚,叫做 urllib.request 抓狭。這樣,看起來就很簡(jiǎn)潔了造烁,符合 Python 語(yǔ)言的特點(diǎn)否过。
方法二
import requests
img_url = 'http://img.mp.itc.cn/upload/20170328/0a4a0b04a20d48faab1a58d920ea0704_th.jpeg'
t = requests.get(img_url, stream=True)
with open('hmbb02.png', 'wb') as f:
for chunk in t.iter_content(chunk_size=32):
f.write(chunk)
這里使用了 requests
模塊里的 stream 參數(shù)午笛,默認(rèn)是 False ,不常用。我在寫文章時(shí)發(fā)現(xiàn)的苗桂,講真药磺,自己也不明白,也去查閱了下資料煤伟。
當(dāng)下載文件過大時(shí)癌佩,建議使用 stream 模式,默認(rèn)是 False便锨,如果我們下載的文件很大驼卖,它會(huì)立即開始下載文件并存放到內(nèi)存中,進(jìn)而會(huì)導(dǎo)致內(nèi)存不足的情況鸿秆。
當(dāng)將 stream 設(shè)置成 True 時(shí),它不會(huì)立即去下載怎囚,當(dāng)你使用 iter_content(iter_lines)遍歷內(nèi)容或者訪問內(nèi)容屬性時(shí)才開始下載卿叽。這樣,就可以按需下載恳守,防止內(nèi)存不足的情況出現(xiàn)考婴。不過,在文件沒有下載之前催烘,還是需要保持連接的沥阱。
使用 stream 模式之后,需要我們手動(dòng)將其關(guān)閉伊群,這里使用 with 語(yǔ)句考杉,優(yōu)雅的處理了這個(gè)問題。
方法三
import requests
img_url = 'http://img.mp.itc.cn/upload/20170328/0a4a0b04a20d48faab1a58d920ea0704_th.jpeg'
# 請(qǐng)求頭舰始,模擬瀏覽器
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36'
}
# timeout 2s得不到結(jié)果崇棠,則超時(shí),不再請(qǐng)求
tem = requests.get(img_url, headers=headers, timeout=2)
with open('hmbb03.png', 'wb') as f:
f.write(tem.content)
直接用 requests
模塊丸卷,請(qǐng)求圖片地址枕稀,使用 with
open
將圖片內(nèi)容固化到本地,注意谜嫉,因?yàn)槭菆D片萎坷,這里使用的是 wb,與 w 是有區(qū)別的沐兰。首先哆档,看字母,r 代表 read僧鲁,是讀文件虐呻; w 代表 write 是寫文件象泵。
w: 打開一個(gè)文件,只用于寫入斟叼,如果文件存在則覆蓋偶惠,如果不存在則新建;
wb: 以二進(jìn)制的形式打開一個(gè)文件朗涩,用于讀寫忽孽,如果文件存在則覆蓋,如果不存在則新建谢床;
當(dāng)然兄一,除了上面介紹的 r,w识腿,還有 a出革,追加(append)的意思,打開一個(gè)文件渡讼,存在則在后面繼續(xù)追加骂束,不會(huì)覆蓋原來的文件,不存在則新建成箫。