我正在尝试制作一个Python脚本,该脚本可以下载网络漫画并将其放入我桌面上的文件夹中。我在这里发现了一些类似的程序,它们的功能相似,但是却完全不符合我的需要。我发现最相似的代码就在这里(http://bytes.com/topic/python/answers/850927-problem-using-urllib-download-images)。我尝试使用此代码:
>>> import 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’递增至最大数,我必须以某种方式确定该数字。关于最佳方法或正确下载文件的任何建议?
这是完成的脚本,它将文件保存到你选择的任何目录中。由于某种奇怪的原因,文件没有下载,而只是下载了。任何有关如何清理它的建议将不胜感激。我目前正在研究如何查找网站上存在的许多漫画,因此我只能获取最新的漫画,而不是在引发一定数量的异常后退出程序。
import urllib import os comicCounter=len(os.listdir('/file'))+1 # reads the number of files in the folder to start downloading at the next comic errorCount=0 def download_comic(url,comicName): """ download a comic in the form of url = http://www.example.com comicName = '00000000.jpg' """ image=urllib.URLopener() image.retrieve(url,comicName) # download comicName at URL while comicCounter <= 1000: # not the most elegant solution os.chdir('/file') # set where files download to try: if comicCounter < 10: # needed to break into 10^n segments because comic names are a set of zeros followed by a number comicNumber=str('0000000'+str(comicCounter)) # string containing the eight digit comic number comicName=str(comicNumber+".jpg") # string containing the file name url=str("http://www.gunnerkrigg.com//comics/"+comicName) # creates the URL for the comic comicCounter+=1 # increments the comic counter to go to the next comic, must be before the download in case the download raises an exception download_comic(url,comicName) # uses the function defined above to download the comic print url if 10 <= comicCounter < 100: comicNumber=str('000000'+str(comicCounter)) comicName=str(comicNumber+".jpg") url=str("http://www.gunnerkrigg.com//comics/"+comicName) comicCounter+=1 download_comic(url,comicName) print 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 the program if any number outside this range shows up quit except IOError: # urllib raises an IOError for a 404 error, when the comic doesn't exist errorCount+=1 # add one to the error count if errorCount>3: # if more than three errors occur during downloading, quit the program break else: print str("comic"+ ' ' + str(comicCounter) + ' ' + "does not exist") # otherwise say that the certain comic number doesn't exist print "all comics are up to date" # prints if all comics are downloaded
使用urllib.urlretrieve:
urllib.urlretrieve
import urllib urllib.urlretrieve("http://www.gunnerkrigg.com//comics/00000001.jpg", "00000001.jpg")