2015-05-14 187 views
4

當我使用python通過urllib2請求或urllib.urlretrieve從url保存圖像時,出現問題。這是該圖像的網址是有效的。我可以使用資源管理器手動下載它。但是,當我使用python下載圖像時,文件無法打開。我使用Mac OS預覽來查看圖像。謝謝!python從url保存圖像

UPDATE:

的代碼如下

def downloadImage(self): 
    request = urllib2.Request(self.url) 
    pic = urllib2.urlopen(request) 
    print "downloading: " + self.url 
    print self.fileName 
    filePath = localSaveRoot + self.catalog + self.fileName + Picture.postfix 
    # urllib.urlretrieve(self.url, filePath) 
    with open(filePath, 'wb') as localFile: 
     localFile.write(pic.read()) 

,我想下載的圖片網址 http://site.meishij.net/r/58/25/3568808/a3568808_142682562777944.jpg

此URL是有效的,我能救它通過瀏覽器,但python代碼會下載一個無法打開的文件。預覽版顯示「可能已損壞或使用預覽無法識別的文件格式。」 我比較了我通過Python下載的圖像和通過瀏覽器手動下載的圖像。前一個的大小要小几個字節。所以看起來該文件是不完整的,但我不知道爲什麼python不能完全下載它。

+0

爲什麼不能打開?你會得到什麼錯誤? ''文件''告訴你什麼?文件是否正確下載或者是否被「User-Agent」或「Cookie」限制或類似的內容阻止? –

+1

包括你正在嘗試的Python代碼請 –

+0

對不起。我提供了更多細節。非常感謝。我不知道是否因爲python中的HTTP請求與瀏覽器下載不同,所以python無法爲我提供完整的圖像文件。 –

回答

9

,在Windows上對我的作品的樣本代碼:

with open('pic1.jpg', 'wb') as handle: 
     response = requests.get(pic_url, stream=True) 

     if not response.ok: 
      print response 

     for block in response.iter_content(1024): 
      if not block: 
       break 

      handle.write(block) 
+0

嗨!感謝您的回覆。那麼你正在使用什麼課程?代碼中的請求類型是什麼? –

+0

只是'進口請求' – DeepSpace

+0

這是完美的!非常感謝!我不知道爲什麼請求模塊可以完成,而urllib和urllib2不能這樣做,但無論如何。 –

12
import requests 

img_data = requests.get(image_url).content 
with open('image_name.jpg', 'wb') as handler: 
    handler.write(img_data) 
+0

工作就像一個魅力:) –