Поэтому я пытаюсь создать скрипт 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» до наибольшего числа, которое я должен был бы как-то определить. Любые рекомендации о том, как сделать это лучше или как правильно загрузить файл?
Спасибо!
РЕДАКТИРОВАТЬ 6/15/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
beautifulsoup
? Это сообщение отображается в списке самых популярныхbeautifulsoup
вопросовОтветы:
Python 2
Использование urllib.urlretrieve
Python 3
Использование urllib.request.urlretrieve (часть устаревшего интерфейса Python 3, работает точно так же)
источник
import urllib.request urllib.request.retrieve("http://...")
import urllib.request urllib.request.urlretrieve("http://...jpg", "1.jpg")
. Этоurlretrieve
теперь , как из 3.x.источник
Просто для записи, используя библиотеку запросов.
Хотя он должен проверять наличие запросов .get ().
источник
Для Python 3 вам нужно будет импортировать
import urllib.request
:для получения дополнительной информации проверьте ссылку
источник
Версия @ DiGMi для Python 3:
источник
Я нашел этот ответ и редактирую его более надежным способом
Из этого вы никогда не получите никаких других ресурсов или исключений при загрузке.
источник
Если вы знаете, что файлы находятся в одном каталоге
dir
веб-сайтаsite
и имеют следующий формат: filename_01.jpg, ..., filename_10.jpg, загрузите их все:источник
Проще всего просто
.read()
прочитать частичный или полный ответ, а затем записать его в файл, который вы открыли в известном хорошем месте.источник
Может быть, вам нужен 'User-Agent':
источник
Помимо того, что я предлагаю вам внимательно прочитать документы
retrieve()
( http://docs.python.org/library/urllib.html#urllib.URLopener.retrieve ), я бы предложил на самом деле вызватьread()
содержание ответа, а затем сохранить его в файл по вашему выбору, а не оставлять его во временном файле, который создает извлечение.источник
Все вышеперечисленные коды не позволяют сохранить оригинальное имя изображения, которое иногда требуется. Это поможет в сохранении изображений на локальном диске, сохраняя оригинальное имя изображения
Попробуйте это для более подробной информации.
источник
Это сработало для меня, используя Python 3.
Он получает список URL-адресов из CSV-файла и начинает загружать их в папку. Если контент или изображение не существует, он принимает это исключение и продолжает творить чудеса.
источник
Более простое решение может быть (Python 3):
источник
Как насчет этого:
источник
Если вам нужна поддержка прокси, вы можете сделать это:
источник
Еще один способ сделать это через библиотеку fastai. Это сработало как обаяние для меня. Я столкнулся с
SSL: CERTIFICATE_VERIFY_FAILED Error
использованием,urlretrieve
поэтому я попробовал это.источник
Использование запросов
источник
Используя urllib, вы можете сделать это мгновенно.
источник