Загрузка изображения через urllib и Python

Таким образом, я пытаюсь сделать сценарий Python, который загружает webcomics и помещает их в папку на моем рабочем столе. Я нашел несколько подобных программ на здесь, которые делают что-то подобное, но ничто вполне как то, в чем я нуждаюсь. Тот, который я нашел самым подобным, прямо здесь (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', )

Я затем искал свой компьютер файл "00000001.jpg", но все, что я нашел, было кэшируемым изображением его. Я даже не уверен, что это сохранило файл к моему компьютеру. После того как я понимаю, как загрузить файл, я думаю, что знаю, как обработать остальных. По существу просто используйте для цикла и разделите строку в '00000000'.'jpg' и увеличьте '00000000' до наибольшего числа, которое я должен был бы так или иначе определить. Какой-либо reccomendations на лучшем способе сделать это или как загрузить файл правильно?

Спасибо!

РЕДАКТИРОВАНИЕ 15.06.10

Вот завершенный сценарий, он сохранил файлы к любому каталогу, который Вы выбираете. По некоторой нечетной причине файлы не загружали, и они просто сделали. Любые предложения о том, как очистить его, очень ценились бы. Я в настоящее время разрабатываю, как узнать, что много комиксов существуют на сайте, таким образом, я могу получить просто последний, вместо того, чтобы выйти из программы после того, как определенное число исключений увеличено.

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

169
задан kmonsoor 28 December 2017 в 00:43
поделиться

4 ответа

Using urllib.urlretrieve:

import urllib
urllib.urlretrieve("http://www.gunnerkrigg.com//comics/00000001.jpg", "00000001.jpg")
227
ответ дан 23 November 2019 в 20:49
поделиться
import urllib
f = open('00000001.jpg','wb')
f.write(urllib.urlopen('http://www.gunnerkrigg.com//comics/00000001.jpg').read())
f.close()
81
ответ дан 23 November 2019 в 20:49
поделиться

Помимо рекомендации внимательно прочитать документацию по retrieve() (http://docs.python.org/library/urllib.html#urllib.URLopener.retrieve), я бы предложил действительно вызвать read() для содержимого ответа, а затем сохранить его в файл по вашему выбору, а не оставлять во временном файле, который создает retrieve.

3
ответ дан 23 November 2019 в 20:49
поделиться

Проще всего просто использовать .read() для чтения частичного или полного ответа, а затем записать его в файл, который вы открыли в известном хорошем месте.

7
ответ дан 23 November 2019 в 20:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: