Как скачать картинку по ссылке python
Перейти к содержимому

Как скачать картинку по ссылке python

  • автор:

Как скачать картинки с сайта с помощью Python

И далее сгенерированный список ссылок надо сохранить как html и скачать их любым менеджером загрузок.

import os # importing all we need, it's not much import wget urls_to_load = list() # a list to store the urls path = 'download_folder' # the path where we will download those files a = "https://member.etn-net.org/magazines/en/2001/ETN-TF_4-2001_EN/ETN-TF_4-2001_EN_01.jpg" # the first two images are separate as the source has them named differently b = "https://member.etn-net.org/magazines/en/2001/ETN-TF_4-2001_EN/ETN-TF_4-2001_EN_31.jpg" urls_to_load.extend([a, b]) # add them to the url list # add all other images, generating their names as we need for i in range(2, 31): # it is important to make this second number +1, so PY makes the list correctly (as far as we start with 2) a = "https://member.etn-net.org/magazines/en/2001/ETN-TF_4-2001_EN/ETN-TF_4-2001_EN_" + str(i).zfill(2) + "a.jpg" b = "https://member.etn-net.org/magazines/en/2001/ETN-TF_4-2001_EN/ETN-TF_4-2001_EN_" + str(i).zfill(2) + "b.jpg" urls_to_load.extend([a, b]) # preparing to download if not os.path.exists(path): try: os.mkdir(path) except OSError: print("Creation of the directory %s failed" % path) else: print("Successfully created the directory %s " % path) # starting to download print("Starting downloading") for url in urls_to_load: file_name = path + '/' + os.path.basename(url) # get the full path to the file if os.path.exists(file_name): os.remove(file_name) # if exists, remove it directly file_name = wget.download(url, out=path) print(file_name) print("ok")

Тут смысл в том, что оно умеет по списку ссылок скачивать, а в остальном оно бесполезное, конечно. Просто мне было лень руками 30 ссылок вбивать. И да, будьте внимательнее с копирайтом, соблюдайте закон.

Может быть интересно:

  • Select all images urls and download them
  • Про Python и ArchiCAD: удалить лишние слои
  • Скрипт для выбора победителя в инстаграме (из лайков)
  • Задаём свойства объектам в ArchiCAD 23 через Python
  • Распечатать дерево проекта в ArchiCAD 23 через Python

Как автоматически скачивать картинки с помощью Python?

Если вы хотите научить нейросеть распознавать объекты на фото, вам понадобятся картинки. Где их взять? Конечно, в Google. Но вам нужно много картинок, так что пока вы будете скачивать их вручную, у вас может пропасть все желание становиться разработчиком. Поэтому лучше автоматизировать процесс, тем более, что для этого в Python есть все возможности.

Как скачать изображения с простой страницы

  • Библиотека Beautiful Soup упрощает процесс, позволяя строить чистое парсинговое дерево. Достаточно посмотреть в исходном коде веб-страницы, как называется интересующий вас класс объектов, и прописать его в команде Beautiful Soup. Дальше, листая полученные объекты, вы сможете собрать нужные элементы.
  • Библиотека Pandas содержит метод read_html, который тоже поможет в вашей задаче. Чтобы воспользоваться этими инструментами, нужно сначала установить парсер XML и HTML lxml. После этого read_html сможет собирать нужные вам данные в отдельные дата-фреймы, а вы сможете листать их в поисках ценных материалов.
  • query — поисковой запрос (в нашем случае — dogs)
  • max_links_to_fetch — максимальное количество ссылок, которые вы хотите собрать
  • webdriver — используемый драйвер для браузера

Пример кода:

def fetch_image_urls(query:str, max_links_to_fetch:int, wd:webdriver, sleep_between_interactions:int=1):

def scroll_to_end(wd):

wd.execute_script(«window.scrollTo(0, document.body.scrollHeight);»)

time.sleep(sleep_between_interactions)

# составляем поисковой запрос

search_url = «https://www.google.com/search?safe=off&site=&tbm=isch&source=hp&q=&oq=&gs_l=img»

# загружаем страницу

wd.get(search_url.format(q=query))

image_urls = set()

image_count = 0

results_start = 0

while image_count < max_links_to_fetch:

scroll_to_end(wd)

# собираем все полученные результаты

thumbnail_results = wd.find_elements_by_css_selector(«img.rg_ic»)

number_results = len(thumbnail_results)

print(f»Found: search results. Extracting links from :»)

for img in thumbnail_results[results_start:number_results]:

# кликаем по предпросмотрам для получения полных изображений

time.sleep(sleep_between_interactions)

except Exception:

# собираем ссылки на изображения

actual_images = wd.find_elements_by_css_selector(‘img.irc_mi’)

for actual_image in actual_images:

if actual_image.get_attribute(‘src’):

image_urls.add(actual_image.get_attribute(‘src’))

image_count = len(image_urls)

if len(image_urls) >= max_links_to_fetch:

print(f»Found: image links, done!»)

print(«Found:», len(image_urls), «image links, looking for more . «)

time.sleep(1)

load_more_button = wd.find_element_by_css_selector(«.ksb»)

if load_more_button:

wd.execute_script(«document.querySelector(‘.ksb’).click();»)

# двигаемся дальше

results_start = len(thumbnail_results)

return image_urls

Чтобы загрузить полученные картинки, нужно установить библиотеку PIL, которая специально предназначена для работы с изображениями. Сделать это можно через команду pip install Pillow.

За скачивание картинок отвечает функция persist_image. Она загрузит нужные объекты в указанную папку, присвоив каждому из них десятизначный идентификатор.

def persist_image(folder_path:str,url:str):

image_content = requests.get(url).content

except Exception as e:

print(f»ERROR — Could not download — «)

image_file = io.BytesIO(image_content)

image = Image.open(image_file).convert(‘RGB’)

file_path = os.path.join(folder_path,hashlib.sha1(image_content).hexdigest()[:10] + ‘.jpg’)

with open(file_path, ‘wb’) as f:

image.save(f, «JPEG», quality=85)

print(f»SUCCESS — saved — as «)

except Exception as e:

print(f»ERROR — Could not save — «)

А функция search_and_download объединяет все эти операции и упрощает работу браузерного драйвера (в данном случае ChromeDriver). Поскольку мы используем его в контексте with, в случае неполадок или ошибки программа просто закроется. Кроме того, search_and_download позволяет вам определить нужное количество картинок. По умолчанию оно установлено на 5, вы можете выбрать любое значение.

def search_and_download(search_term:str,driver_path:str,target_path=’./images’,number_images=5):

target_folder = os.path.join(target_path,’_’.join(search_term.lower().split(‘ ‘)))

if not os.path.exists(target_folder):

os.makedirs(target_folder)

with webdriver.Chrome(executable_path=driver_path) as wd:

res = fetch_image_urls(search_term, number_images, wd=wd, sleep_between_interactions=0.5)

for elem in res:

persist_image(target_folder,elem)

Заработало, мы получили 100 картинок с собаками.

При использовании этого метода помните, что большинство изображений в Интернете защищено авторским правом. Хотя сбор картинок сам по себе не грозит неприятными последствиями, использовать их в коммерческих целях вы не можете.

Этот пример отлично показывает, как легко с помощью Python можно автоматизировать свои задачи и освободить время для более интересных вещей. Освоить этот язык можно всего за несколько недель.

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » Скачать изображение с сайта, не зная название файла

#1 Июнь 7, 2022 21:13:39

utyara3 Зарегистрирован: 2021-07-12 Сообщения: 27 Репутация: 0 Профиль Отправить e-mail

Скачать изображение с сайта, не зная название файла

Привет всем, хочу скачать изображение с сайта, но оно постоянно разное и название соответственно тоже меняется, хочу скачать его через код, но не знаю его названия, помогите
UPD: если его качать, то качать надо с помощью названия, а название разное типо
надеюсь объяснил понятно

Отредактировано utyara3 (Июнь 7, 2022 21:20:41)

#2 Июнь 7, 2022 21:51:30

xam1816 Зарегистрирован: 2020-05-11 Сообщения: 1260 Репутация: 108 Профиль Отправить e-mail

Скачать изображение с сайта, не зная название файла

utyara3
Привет всем, хочу скачать изображение с сайта

какое изображение с какого сайта?

#3 Июнь 7, 2022 23:29:31

utyara3 Зарегистрирован: 2021-07-12 Сообщения: 27 Репутация: 0 Профиль Отправить e-mail

Скачать изображение с сайта, не зная название файла

хыхыхы, ну в общем с prnt.sc/ ты вводишь после / комбинацию букв любую и он выдает скриншот абсолютно рандомный скрин рандомного человека, например prnt.sc/ytr13m и программа создает рандом ссылку переходит и скачивает изображение, у меня проблема с переходом на сайт и скачиванием, сколько пытался на scrapy, requests, Beautiful Soup, не мое это, но научится хочется, спасибо заранее за помощь

#4 Июнь 8, 2022 00:02:41

py.user.next От: Зарегистрирован: 2010-04-29 Сообщения: 9629 Репутация: 839 Профиль Отправить e-mail

Скачать изображение с сайта, не зная название файла

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

#5 Июнь 8, 2022 01:58:36

utyara3 Зарегистрирован: 2021-07-12 Сообщения: 27 Репутация: 0 Профиль Отправить e-mail

Скачать изображение с сайта, не зная название файла

py.user.next
Напиши первую функцию, которая просто генерирует ссылку.Напиши вторую функцию, которая заходит по известной ссылке и скачивает изображение.Напиши третью функцию, которая сначала вызывает первую функцию и получает из неё ссылку, а потом вызывает вторую функцию, передаёт в неё полученную ссылку и скачивает изображение.

молодец!! круто подсказал! я написал что не знаю как скачать изображения если ты не знаешь его имени
.

#6 Июнь 8, 2022 02:05:54

utyara3 Зарегистрирован: 2021-07-12 Сообщения: 27 Репутация: 0 Профиль Отправить e-mail

Скачать изображение с сайта, не зная название файла

нашел скрипт еле как!

from bs4 import BeautifulSoup import urllib.request import random import string url_base = 'https://prnt.sc/' def get_html(): global url_last3 url_last3 = str(''.join(random.choice(string.digits + string.ascii_lowercase) for _ in range(3))) req = str(url_base + url_first3 + url_last3) html = urllib.request.urlopen(req).read() return html def main(): count = input('How many pictures I must download? ') pic_count = int(count) global url_first3 url_first3 = input('Enter first 3 digits: ') print('OK! Now I`ll download ' + count + ' pictures with the "' + url_first3 + '" first digits!') opener = urllib.request.build_opener() opener.addheaders = [('User-Agent', 'Mozilla/5.0')] urllib.request.install_opener(opener) for counter in range(pic_count): html = get_html() soup = BeautifulSoup(html, 'html.parser') picture_url = soup.find(id='screenshot-image')['src'] urllib.request.urlretrieve(picture_url, picture_url[40:]) count = counter + 1 print (str(count) + ' [' + str(url_first3) + str(url_last3) + '] - [' + picture_url + '] - DONE!') if __name__ == '__main__': main() 

#7 Июнь 8, 2022 06:14:22

py.user.next От: Зарегистрирован: 2010-04-29 Сообщения: 9629 Репутация: 839 Профиль Отправить e-mail

Скачать изображение с сайта, не зная название файла

utyara3
нашел скрипт еле как!

А тебе не кажется, что он выглядит как-то странновато и что-то как-то немного похож на какое-то говно из папье-маше?

opener = urllib.request.build_opener() 

Давно я не видел этот метод, уже лет десять. Примерно тогда или даже раньше он нужен был, чтобы понять, как бы питоном страницу скачать. Тогда эти средства в питоне были слабо развиты и проводилось много экспериментов всяких.

utyara3
молодец!! круто подсказал!

Так это не для тебя; это для того, кто тебе будет писать нормальный вариант. Сам-то ты не сможешь написать.

utyara3
я написал что не знаю как скачать изображения

Скачать не сложно, сложно будет делать всё остальное — то, что делается до скачивания и после скачивания.

А сейчас ты в чайную кружку с чаем и сахаром налил бульон из борща и капусту положил оттуда же. Это, конечно, можно всё съесть и выпить, но это не чаепитие совсем, даже если тортик рядом поставить. Примерно вот это напоминает этот “твой” скрипт.

Отредактировано py.user.next (Июнь 8, 2022 06:17:13)

#8 Июнь 9, 2022 01:54:37

xam1816 Зарегистрирован: 2020-05-11 Сообщения: 1260 Репутация: 108 Профиль Отправить e-mail

Скачать изображение с сайта, не зная название файла

utyara3
нашел скрипт еле как!

просто написал

import re import requests import random from string import ascii_lowercase, digits from bs4 import BeautifulSoup import os # ROOT_URL = r'https://prnt.sc/' MY_HEADERS = "user-agent": "Mozilla/5.0 (X11; Linux x86_64)" " AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.141" " YaBrowser/22.3.3.889 Yowser/2.5 Safari/537.36", > MY_PATH = '/home/xam/Загрузки/test_folder' # def get_random_char_set(): out = '' for _ in range(random.randint(6, 7)): out += random.choice(ascii_lowercase+digits) return out # def get_html(url): resp = requests.get(url, headers=MY_HEADERS) if resp.ok: return resp.content else: print(resp.status_code) # def get_img_src_from_html(html): soup = BeautifulSoup(html, 'html.parser') search_img = soup.find(id='screenshot-image', src=re.compile(r'https')) if search_img: return search_img['src'] # def download_img(path, img_src): resp = requests.get(img_src, headers=MY_HEADERS) if resp.status_code == 200: if resp.headers['content-type'] in ['image/png', 'image/jpeg']: with open(os.path.join(path,img_src.rsplit('/', 1)[1]), 'wb') as f: f.write(resp.content) else: print(resp.headers['content-type']) else: print(f' status code:') # # def download_several_img(count): i = 0 while i  count: char_set = get_random_char_set() html = get_html(ROOT_URL+char_set) img_src = get_img_src_from_html(html) if img_src: print(char_set) download_img(MY_PATH, img_src) i += 1 else: print('*') # if __name__ == '__main__': download_several_img(3) # загрузит 3 картинки 

#9 Июнь 9, 2022 02:16:18

py.user.next От: Зарегистрирован: 2010-04-29 Сообщения: 9629 Репутация: 839 Профиль Отправить e-mail

Скачать изображение с сайта, не зная название файла

xam1816
просто написал

Убери print’ы отовсюду. Функции должны делать только return. Когда нужно выводить что-то на экран, это должны делать отдельные выводящие функции, которым что-то там подаётся через аргументы, чтобы они могли сообразить, что выводить. Связано это с тем, что сегодня тебе надо выводить на экран, а завтра этот вывод на экран надо будет разом отключить во всей программе. Обычно это всё прикрепляется к одной маленькой опции в конфигурационном файле программы, где ты, например, поставил “print off” — и по всей программе вывод отключился, где ты написал “log on” — и по всей программе вывод в лог-файл пошёл. Так вот, когда у тебя внутри рабочих функций это всё замешано, ты не сможешь быстро включать и отключать вывод, перенаправлять его, да и просто менять формат вывода, что тоже часто бывает нужно. Часто нужно делать вывод более подробный или менее подробный, добавлять в него какие-то данные или, наоборот, скрывать в нём какие-то данные, чтобы экран не забивать. Всё это регулируется опциями, подаваемыми в программу (через командную строку и/или через файл настроек).

Поэтому рабочие функции должны только работать. Выводящие функции должны только выводить. Связывает их между собой связывающая функция. У каждой функции только её дело. Функция не должна делать сто вещей одновременно. Функция не должна быть Дедом Морозом, который сам танцует, сам поёт, сам подарки раздаёт.

tags: pure function

Отредактировано py.user.next (Июнь 9, 2022 02:17:40)

#10 Июнь 9, 2022 16:31:10

utyara3 Зарегистрирован: 2021-07-12 Сообщения: 27 Репутация: 0 Профиль Отправить e-mail

Скачать изображение с сайта, не зная название файла

py.user.next

Ого, прости, я не думал что кто то код писать будет, я думал мне просто скажут что использовать, спасибо, что объяснил!

Не могу скачать файл python

Пытаюсь скачать картинку не получаеться, через браузер все открывает, вставляю другую ссылку в код тоже все качает. Не могу понять чего не хватает.

a = ‘хтпп: //protect.gost.ru/image.ashx?page=9A7245DE-F5E9-455C-9905-A9145E9D9140’

r = requests.get(a)
fail=open(r»name1.jpg», «wb»)
fail.write(r.content)
print(«ОК»)

Голосование за лучший ответ
у тебя :
«а=хтпп: //»
А должно быть:
«а=хттп: //»
sarafan56Знаток (426) 5 лет назад
Это я ошибся сей час когда писал вопрос. вписываю я правельно ссылку хттп: // но не качает все равно

Глеб Сергеев Ученик (137) Если перейти по ссылке которую ты написал в вопросе, то он не заходит на сайт и не качает ничего/, но если зайти на главную стр т. е. protect.gost.ru то он заходит. получается какой нибудь символ после / пропустил и он просто не находит страничку. Попробуй через впн перейти по ссылке может быть оператор заблочил данный фаил (или категория фаилов)

Наверно там имеют значение куки. Если ты попробуешь открыть эту ссылку из другого браузера, она не откроется. Или удали куки браузера для gost.ru и попробуй открыть эту ссылку.

sarafan56Знаток (426) 5 лет назад

Пытался открыть ссылку в другой машине и ты прав неполучилось. НО. если зайтина сайт и потом во вкладку где лежит это изображение то можно открыть это изображение спокойно через браузер по этой самой ссылке. Теперь еще больше вопросов стало (

Дед Мазай Гений (58061) Я же говорю, там используются куки (точнее одна кука). Знаешь что такое куки (cookies)?

Если без requests, то можно вот так:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *