Как скачать картинку по ссылке 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

Автоматизация создания стикеров с помощью веб-скрейпинга и обработки изображений в Python

В этой статье я расскажу вам о том, как я создал 42 стикера Telegram из изображений постеров из интернет-магазина. В магазине продаются разные постеры с забавными каламбурами, но нет соответствующих стикеров. Создадим их!

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

Итак, план такой:

  1. Веб-скраппинг — проанализируйте все картинки из интернет-магазина.
  2. Автоматически отделяйте буквы от фона, удаляйте тени с фона и заставьте изображения больше походить на отсканированные изображения.

Скачивание картинок

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

Для этого сохраним все ссылки с картинок в галерее.

import requests from bs4 import BeautifulSoup import urllib.request url = 'https://demonpress.ecwid.com/%D0%9F%D0%BB%D0%B0%D0%BA%D0%B0%D1%82%D1%8B-c26701164' headers = text = requests.get(url, headers=headers) soup = BeautifulSoup(text.content, 'html.parser') urls = [] for i in soup.find_all('a', attrs = ): urls += [i['href']]

Галерея разделена на четыре страницы, каждая из которых содержит 15 плакатов. Чтобы перейти на следующую страницу, достаточно добавить ?offset= 15, 30 или 45. Это позволяет нам разобрать оставшиеся ссылки.

 for i in ['15','30','45']: url_next = url + '?offset=' + i text = requests.get(url_next, headers=headers) soup = BeautifulSoup(text.content, 'html.parser') for i in soup.find_all('a', attrs = ): urls += [i['href']]

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

for url in urls: text = requests.get(url, headers=headers) soup = BeautifulSoup(text.content, 'html.parser') for j in soup.find_all('img', ): urllib.request.urlretrieve(j['src'], j['title'].replace('/','').replace('*','').replace('?','')+'.jpg') 

Картинки названы по тексту на плакатах, поэтому нам нужно удалить запрещенные символы из имени, такие как «/», «?» а также «*».

Обработка изображений

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

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

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

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

После определения пикселя как части фона, давайте установим его значение на (245, 245, 245). Пиксели, входящие в состав букв, будут установлены ближе к (200, 17, 11). Фон не будет идеально белым, но он выглядит лучше, поскольку идеальной белой бумаги не существует, а набор наклеек должен имитировать плакаты.

def remove_bg(input_img: np.ndarray) -> np.ndarray: img = input_img.copy() for i in range(0, img.shape[0]): for j in range(0, img.shape[1]): if img[i][j].std() < 30: img[i][j] = [245, 245, 245] else: img[i][j] = img[i][j] + 0.5*([200, 17, 11] - img[i][j]) return img 

Теперь последний шаг - изменить размер изображения так, чтобы наибольшая длина была 512. Чтобы изменить размер всех изображений и сохранить их как файлы png, я воспользуюсь библиотекой PIL.

from PIL import Image files = [] for i in os.listdir('.'): if i[-4::] == '.jpg': files += [i] for file in files: img = mpimg.imread(file).copy() img = remove_bg(img) x = int(512) y = int(512 * img.shape[1]/img.shape[0]) img = Image.fromarray((resize(img, (x, y))*255).astype(np.uint8)) img.save(f'result/', 'png') print('Done!') 

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

[RSS Feed]

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

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

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

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

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

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

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

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

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

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

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

Онлайн

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

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

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

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

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

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

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

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

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

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

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

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

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

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

utyara3 Зарегистрирован: 2021-07-12 Сообщения: 30 Репутация: 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 Сообщения: 9698 Репутация: 842 Профиль Отправить 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 Сообщения: 1267 Репутация: 109 Профиль Отправить 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 Сообщения: 9698 Репутация: 842 Профиль Отправить 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 Сообщения: 30 Репутация: 0 Профиль Отправить e-mail

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

py.user.next

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

Как, используя Python, загрузить все изображения с веб-страницы

Наверняка, хоть раз в жизни вам хотелось загрузить все изображения с понравившейся веб‑страницы? Сейчас вы узнаете, как создать парсер Python, который извлекает все изображения с веб‑страницы по ее URL‑адресу и загружает их с помощью библиотек requests и BeautifulSoup .

Для начала нам понадобится довольно много зависимостей, давайте установим их:

pip3 install requests bs4 tqdm

Откройте новый файл с именем download_images.py и импортируйте необходимые модули:

import requests import os from tqdm import tqdm from bs4 import BeautifulSoup as bs from urllib.parse import urljoin, urlparse

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

def is_valid(url): """ Проверяет, является ли url допустимым URL """ parsed = urlparse(url) return bool(parsed.netloc) and bool(parsed.scheme)

Функция urlparse() разбирает URL‑адрес на шесть составных частей, а нам просто нужно увидеть, есть ли там netloc (имя домена) и scheme (протокол).
Во-вторых, я собираюсь написать основную функцию, которая определет все URL‑адреса изображений на веб‑странице:

def get_all_images(url): """ Возвращает все URL‑адреса изображений по одному `url` """ soup = bs(requests.get(url).content, "html.parser")

HTML-содержимое веб‑страницы находится в объекте soup , чтобы извлечь все теги img в HTML, нам нужно использовать метод soup.find_all("img") . Посмотрим на него в действии:

urls = [] for img in tqdm(soup.find_all("img"), "Extracting images"): img_url = img.attrs.get("src") if not img_url: # если img не содержит атрибута src, просто пропустите continue

Это получит все элементы img в виде списка Python.

Я обернул его в объект tqdm , чтобы напечатать индикатор выполнения. Чтобы получить URL‑адрес тега img , есть атрибут src . Однако есть некоторые теги, которые не содержат атрибута src , мы пропускаем, используя оператор continue .

Теперь нам нужно убедиться, что URL‑адрес является абсолютным:

# сделать URL абсолютным, присоединив домен к только что извлеченному URL img_url = urljoin(url, img_url)

Встречаются URL‑адреса, содержащие пары ключ-значение метода GET HTTP‑протокола, которые нам не нравятся (заканчиваются чем-то вроде этого «/image.png?c=3.2.5«), удалим их:

try: pos = img_url.index("?") img_url = img_url[:pos] except ValueError: pass

Получаем позицию символа « ? «, а затем после него всё удаляем, а если его нет, то возникает исключение ValueError , поэтому я заключил его в блок try/except (конечно, вы можете реализовать сей момент лучше, поделитесь своим решением в комментарии).

Теперь давайте убедимся, что каждый URL‑адрес действителен и возвращает все URL‑адреса изображений:

# наконец, если URL действителен if is_valid(img_url): urls.append(img_url) return urls

Теперь, когда у нас есть функция, которая получает все URL‑адреса изображений, нам нужна функция для загрузки файлов из Интернета , я использовал следующую функцию:

def download(url, pathname): """ Загружает файл по URL‑адресу и помещает его в папку `pathname` """ # если путь не существует, сделать этот путь dir if not os.path.isdir(pathname): os.makedirs(pathname) # загружаем тело ответа по частям, а не сразу response = requests.get(url, stream=True) # get the total file size file_size = int(response.headers.get("Content-Length", 0)) # получаем имя файла filename = os.path.join(pathname, url.split("/")[-1]) # индикатор выполнения, изменение единицы измерения на байты вместо итераций (по умолчанию tqdm) progress = tqdm(response.iter_content(1024), f"Downloading ", total=file_size, unit="B", unit_scale=True, unit_divisor=1024) with open(filename, "wb") as f: for data in progress.iterable: # записываем прочитанные данные, в файл f.write(data) # обновить вручную индикатор выполнения progress.update(len(data))

Вышеупомянутая функция принимает URL‑адрес файла для загрузки и путь к папке, в которую этот файл будет сохранен.

Наконец, вот основная функция:

def main(url, path): # получить все изображения imgs = get_all_images(url) for img in imgs: # для каждого изображения, загрузите его download(img, path)

Посмотрите код файла download_images.py целиком:

import requests import os from tqdm import tqdm from bs4 import BeautifulSoup as bs from urllib.parse import urljoin, urlparse def is_valid(url): """ Проверяем, является ли url действительным URL """ parsed = urlparse(url) return bool(parsed.netloc) and bool(parsed.scheme) def get_all_images(url): """ Возвращает все URL‑адреса изображений по одному `url` """ soup = bs(requests.get(url).content, "html.parser") urls = [] for img in tqdm(soup.find_all("img"), "Получено изображение"): img_url = img.attrs.get("src") if not img_url: # если img не содержит атрибута src, просто пропускаем continue # сделаем URL абсолютным, присоединив имя домена к только что извлеченному URL img_url = urljoin(url, img_url) # удалим URL‑адреса типа '/hsts-pixel.gif?c=3.2.5' try: pos = img_url.index("?") img_url = img_url[:pos] except ValueError: pass # наконец, если URL действителен if is_valid(img_url): urls.append(img_url) return urls def download(url, pathname): """ Загружает файл по URL‑адресу и помещает его в папку `pathname` """ # если путь не существует, создать dir if not os.path.isdir(pathname): os.makedirs(pathname) # загружаем тело ответа по частям, а не сразу response = requests.get(url, stream=True) # получить общий размер файла file_size = int(response.headers.get("Content-Length", 0)) # получаем имя файла filename = os.path.join(pathname, url.split("/")[-1]) # индикатор выполнения, изменение единицы измерения на байты вместо итераций (по умолчанию tqdm) progress = tqdm(response.iter_content(1024), f"Загружен ", total=file_size, unit="B", unit_scale=True, unit_divisor=1024) with open(filename, "wb") as f: for data in progress.iterable: # записываем прочитанные данные в файл f.write(data) # обновление индикатора выполнения вручную progress.update(len(data)) def main(url, path): # получить все изображения imgs = get_all_images(url) for img in imgs: # скачать для каждого img download(img, path) if __name__ == "__main__": import argparse parser = argparse.ArgumentParser(description="Этот скрипт загружает все изображения с веб‑страницы.") parser.add_argument("url", help="URL‑адрес веб‑страницы, с которой вы хотите загрузить изображения.") parser.add_argument("-p", "--path", help="Каталог, в котором вы хотите хранить изображения, по умолчанию - это домен переданного URL.") args = parser.parse_args() url = args.url path = args.path if not path: # если путь не указан, используйте доменное имя этого url в качестве имени папки path = urlparse(url).netloc main(url, path)

Получение всех URL‑адресов изображений с этой страницы и загрузка каждого из них по одному. Давайте проверим:

main("https://waksoft.susu.ru/", "waksoft-susu-ru")

Будут загружены все изображения с указанного URL‑адреса и сохранены в папке «waksoft‑susu‑ru», которая будет создана автоматически.

Однако обратите внимание, что есть некоторые веб‑сайты, которые загружают свои данные с помощью Javascript, в этом случае вы должны вместо этого использовать библиотеку requests_html. Я уже сделал другой скрипт, который вносит некоторые изменения в исходный и обрабатывает рендеринг Javascript, и записал его в файл download_images_js.py, посмотрите:

from requests_html import HTMLSession import requests from tqdm import tqdm from bs4 import BeautifulSoup as bs from urllib.parse import urljoin, urlparse import os def is_valid(url): """ Проверяем, является ли url действительным URL """ parsed = urlparse(url) return bool(parsed.netloc) and bool(parsed.scheme) def get_all_images(url): """ Возвращает все URL‑адреса изображений по одному `url` """ # инициализировать сеанс session = HTMLSession() # делаем HTTP‑запрос и получаем ответ response = session.get(url) # выполнить Javascript с таймаутом 20 секунд response.html.render(timeout=20) # создаем парсер soup soup = bs(response.html.html, "html.parser") urls = [] for img in tqdm(soup.find_all("img"), "Извлечено изображение"): img_url = img.attrs.get("src") or img.attrs.get("data-src") or img.attrs.get("data-original") print(img_url) if not img_url: # если img не содержит атрибута src, просто пропустим continue # сделаем URL абсолютным, присоединив имя домена к только что извлеченному URL img_url = urljoin(url, img_url) # удалим URL‑адреса типа '/hsts-pixel.gif?c=3.2.5' try: pos = img_url.index("?") img_url = img_url[:pos] except ValueError: pass # наконец, если URL действителен if is_valid(img_url): urls.append(img_url) # закрыть сеанс, чтобы завершить процесс браузера session.close() return urls def download(url, pathname): """ Загружает файл по URL‑адресу и помещает его в папку `pathname` """ # если папка не существует, создадим папку с именем dir if not os.path.isdir(pathname): os.makedirs(pathname) # загружаем тело ответа по частям, а не сразу response = requests.get(url, stream=True) # получить общий размер файла file_size = int(response.headers.get("Content-Length", 0)) # получаем имя файла filename = os.path.join(pathname, url.split("/")[-1]) # индикатор выполнения, изменяем единицы измерения на байты вместо итераций (по умолчанию tqdm) progress = tqdm(response.iter_content(1024), f"Downloading ", total=file_size, unit="B", unit_scale=True, unit_divisor=1024) with open(filename, "wb") as f: for data in progress.iterable: # записываем прочитанные данные в файл f.write(data) # обновим индикатор выполнения вручную progress.update(len(data)) def main(url, path): # получить все изображения imgs = get_all_images(url) for img in imgs: # скачать для каждого img download(img, path) if __name__ == "__main__": import argparse parser = argparse.ArgumentParser(description="Этот скрипт загружает все изображения с веб‑страницы.") parser.add_argument("url", help="URL‑адрес веб‑страницы, с которой вы хотите загрузить изображения.") parser.add_argument("-p", "--path", help="Каталог, в котором вы хотите хранить изображения, по умолчанию - это домен переданного URL") args = parser.parse_args() url = args.url path = args.path if not path: # если путь не указан, в качестве имени папки используйте доменное имя rl path = urlparse(url).netloc main(url, path)

Хорошо, всё на сегодя!

Print Friendly, PDF & Email

Как, используя Python, загрузить все изображения с веб-страницы , опубликовано К ВВ, лицензия — Creative Commons Attribution-NonCommercial 4.0 International.
Респект и уважуха

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

Для отправки комментария вам необходимо авторизоваться.

Ограничение ответственности

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

Рекомендую

Link's QR code

Время, где сейчас

До восхода не будить и при пожаре выносить в первую очередь, а после заката звонить только в экстренных случаях:

Скоро, скоро Новый год

Рубрики

Отче наш

Отче наш, Иже еси́ на небесе́х! Да святи́тся имя Твое́, да прии́дет Ца́рствие Твое, да будет воля Твоя, я́ко на небеси́ и на земли́. Хлеб наш насу́щный даждь нам днесь; и оста́ви нам до́лги наша, я́коже и мы оставля́ем должнико́м нашим; и не введи́ нас во искушение, но изба́ви нас от лука́ваго

Под контролем

  1. Академия студенчества
  2. ИЛИМК
  3. Офис академического письма
  4. МАЛиМК
  5. НОЦ Лингво-инновационных технологий
  6. Партнерская сеть «Институт Пушкина»
  7. Центр делового образования
  8. Центр «Лингва»
  9. Управление инновациями и инвестициями
  10. Финансовый менеджмент
  11. Кафедра ИТЭ
  12. Кафедра ЦЭИИТ
  13. Бизнес-информатика + Кванториум
  14. ВКР: Бизнес-информатика
  15. Бизнес-информатика on-line
  16. Бизнес-информатика — драйв цифровой трансформации
  17. ЭУ-160
  18. ЭУ-235
  19. ЭУ-320
  20. ЭУ-442
  21. ЭУ-419 (архив)
  22. ЭУ-444, 461 (архив)
  23. ЭУ-459 (архив)
  24. ЭУ-434 (архив)
  25. Магистры Бизнес-информатики
  26. Магистратура ВШЭУ
  27. Технологическая площадка
  28. Digital Experience Workshop
  29. Cтэк технологий Web-разработки: шаг за шагом
  30. Абитуриент ВШЭУ — 2018
  31. Школа бизнеса ВШЭУ
  32. Кибер-студент
  33. Зеркало сайта
  34. ИТ-марафон
  35. Покори свой Олимп
  36. Digital Experience
  37. ООО «ЮЖУРАЛСЕРВИС»
  38. Школа перспективных технологий
  39. Бизнес‑информатике 15 лет

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

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