使用python做爬蟲時儲存圖片的方法大全以及需要注意的地方
阿新 • • 發佈:2019-02-06
1.使用urllib.urlretrieve()
用法:urlretrieve(url, filename=None, reporthook=None, data=None)
- 引數 finename 指定了儲存本地路徑(如果引數未指定,urllib會生成一個臨時檔案儲存資料。)
- 引數 reporthook 是一個回撥函式,當連線上伺服器、以及相應的資料塊傳輸完畢時會觸發該回調,我們可以利用這個回撥函式來顯示當前的下載進度。
- 引數 data 指 post 到伺服器的資料,該方法返回一個包含兩個元素的(filename, headers)元組,filename 表示儲存到本地的路徑,header 表示伺服器的響應頭。
py2程式碼示例:
# -*- coding: utf-8 -*-
import urllib
img_src = 'http://724.169pp.net/bizhi/2017/039/1.jpg'
urllib.urlretrieve(img_src,r'C:\\Users\\ME\\Desktop\\Python project\\pachong\\scrapy\\secondDemo\\photo\\1.jpg')
2.使用PIL+requests
PIL:Python Imaging Library,已經是Python平臺事實上的影象處理標準庫了。PIL功能非常強大,但API卻非常簡單易用。
requests是python實現的最簡單易用的HTTP庫,建議爬蟲使用requests庫。預設安裝好python之後,是沒有安裝requests模組的,需要單獨通過pip安裝
BytesIO是用來操作二進位制資料的,因為圖片是二進位制資料,和它相對的自然是StringIO,這是用來存str的。他們的區別就好似python讀寫普通檔案和二進位制檔案。
py2程式碼示例:
# -*- coding: utf-8 -*- import requests from PIL import Image from io import BytesIO img_src = 'http://724.169pp.net/bizhi/2017/039/1.jpg' response = requests.get(img_src) image = Image.open(BytesIO(response.content)) image.save(r'C:\\Users\\ME\\Desktop\\Python project\\pachong\\scrapy\\secondDemo\\photo\\' + '1.jpg')
3.使用os+requests
os 模組提供了非常豐富的方法用來處理檔案和目錄,可參考 http://www.runoob.com/python3/python3-os-file-methods.html 例如
py3程式碼示例:
# -*- coding: utf-8 -*-
import urllib
import requests
import os
import codecs
url = 'http://724.169pp.net/bizhi/2017/039/1.jpg'
bytes = urllib.request.urlopen(url)
f = codecs.open(r'C:\\Users\\ME\\Desktop\\Python project\\pachong\\scrapy\\secondDemo\\photo\\' + '1.jpg', 'wb') # 代開一個檔案,準備以二進位制寫入檔案
f.write(bytes.read()) # write並不是直接將資料寫入檔案,而是先寫入記憶體中特定的緩衝區
f.flush() # 將緩衝區的資料立即寫入緩衝區,並清空緩衝區
f.close() # 關閉檔案
需要注意的地方:
1.區分python2與3的版本,尤其是2的版本第一行一定要加
# -*- coding: utf-8 -*-
2.注意存入檔名,如果有中文,要注意編碼轉換
3.EOL while scanning string literal
最後得到的結果: