通過urllib和python下載圖片

| | | | | | | | | | | | | | | | | | |

所以我“正在嘗試製作一個 Python 腳本來下載網絡漫畫並將它們放在我桌面上的一個文件夾中。我在這裡找到了一些類似的程序,它們執行類似的操作,但與我需要的完全不同。我發現最相似的一個就在這裡(http: //bytes.com/topic/python/answers/850927-problem-using-urllib-download-images)。我嘗試使用此代碼:

>>>導入urllib>>> image = urllib.URLopener() >>> image.retrieve("http://www.gunnerkrigg.com//comics/00000001.jpg";"00000001.jpg") ("00000001.jpg", <httplib.HTTPMessage instance at 0x1457a80>)  

然後我在我的電腦中搜索了一個文件“00000001.jpg”,但我發現的只是它的緩存圖片。我什至不確定它是否將文件保存到我的計算機上。一旦我了解如何下載文件,我想我知道如何處理其餘部分。基本上只需使用 for 循環並將字符串拆分為“00000000”。 “jpg”並將“00000000”增加到最大的數字,我必須以某種方式確定。關於執行此操作的最佳方法或如何正確下載文件的任何建議?

謝謝!

EDIT 6/15/10

這是完成的腳本,它將文件保存到您選擇的任何目錄。出於某種奇怪的原因,文件沒有下載,他們只是下載了.任何有關如何清理它的建議將不勝感激。我目前正在研究如何找出網站上存在的許多漫畫,這樣我就可以獲得最新的漫畫,而不是在引發一定數量的異常後退出程序。

 import urllib import os comicCounter=len(os.listdir("/file"))+1 # 讀取文件夾中的文件數,下次漫畫開始下載 errorCount=0 def download_comic(url,comicName): """以url = http://www.example.com的形式下載漫畫comicName = "00000000.jpg" """ image=urllib.URLopener() image.retrieve(url,comicName) # 下載comicName at URL while comicCounter <= 1000: # 不是最優雅的解決方案 os.chdir("/file") # set where files download to try: if comicCounter < 10: # 需要分成 10^n 段,因為漫畫名稱是一組零後跟一個數字 ComicNumber=str("0000000"+str(comicCounter)) # 包含八位漫畫數字的字符串 ComicName=str(comicNumber+".jpg") # 包含文件名的字符串 url=str("http:/ /www.gu nnerkrigg.com//comics/"+comicName) # 為漫畫創建 URL ComicCounter+=1 # 增加漫畫計數器以轉到下一個漫畫,必須在下載之前,以防下載引發異常 download_comic(url,comicName ) # 使用上面定義的函數來下載漫畫打印的url if 10 <= comicCounter < 100: 漫畫號=str("000000"+str(comicCounter)) 漫畫號=str(漫畫號+".jpg") url=str("http://www.gunnerkrigg.com//comics/"+comicName) 漫畫號+=1 download_comic(url,comicName) 打印 url if 100 <= ComicCounter < 1000:comicNumber=str("00000"+str(comicCounter)) comicName=str(comicNumber+".jpg") url=str("http://www.gunnerkrigg.com//comics/"+comicName) comicCounter+=1 download_comic(url,comicName) print url else: # 如果出現此範圍之外的任何數字,則退出程序 quit IOError 除外:# urllib 在漫畫不存在時為 404 錯誤引發 IOError errorCount+=1 # 加一錯誤計數 if errorCount>3: # 如果下載過程中出現超過三個錯誤,則退出程序 break else: print str("comic"+ " " + str(comicCounter) + " " + "不存在") # else說某個漫畫號不存在 print "all comics are up to date" #如果所有漫畫都下載了就打印