最近在學習爬蟲,在爬取網站時很多時候是需要將圖片或視頻下載到本地 今天就來說說如何使用urllib將圖片保存到本地
以下代碼均為win7 python3.6.*
使用urllib下載函數保存
from urllib import request # 要下載的圖片鏈接地址 img_url = 'https://imgsa.baidu.com/forum/w%3D580/sign=adc0a68a97504fc2a25fb00dd5dfe7f0/873df8dcd100baa14fff6d394b10b912c9fc2e64.jpg' #url為圖片下載鏈接 request.urlretrieve(url=img_url,'./baidu/1.jpg')
使用urllib文件方式寫入文件
from urllib import request #要下載的鏈接地址 img_url = 'https://imgsa.baidu.com/forum/w%3D580/sign=adc0a68a97504fc2a25fb00dd5dfe7f0/873df8dcd100baa14fff6d394b10b912c9fc2e64.jpg' # 文件的方式保存下載的圖片 response = request.urlopen(img_url) #讀取返回的內容 img = response.read() with open('baidu/1.jpg','wb') as f: #將圖片內容以二進制寫入 f.write(img)
使用urllib的下載函數下載視頻並輸出下載進度
from urllib import request base_url = 'https://f.us.sinaimg.cn/001KhC86lx07laEy0PtC01040200y8vC0k010.mp4?label=mp4_hd&template=640x360.28&Expires=1528689591&ssig=qhWun5Mago&KID=unistore,video' #下載進度函數 def report(a,b,c): ''' a:已經下載的數據塊 b:數據塊的大小 c:遠程文件的大小 ''' per = 100.0 * a * b / c if per > 100: per = 100 print ('%.2f%%' % per) #使用下載函數下載視頻並調用進度函數輸出下載進度 request.urlretrieve(url=base_url,finename='weibo/1.mp4',reporthook=report,data=None)
說明:
-
參數 finename 指定了保存本地路徑(如果參數未指定,urllib會生成一個臨時文件保存數據。)
-
參數 reporthook 是一個回調函數,當連接上服務器、以及相應的數據塊傳輸完畢時會觸發該回調,我們可以利用這個回調函數來顯示當前的下載進度。
-
參數 data 指 post 到服務器的數據,該方法返回一個包含兩個元素的(filename, headers)元組,filename 表示保存到本地的路徑,header 表示服務器的響應頭。
-
Python 下載超大文件
如有錯誤 歡迎交流