Скачивание изображений из интернета с помощью Python и urllib
Быстрый ответ
Для загрузки изображения с помощью Python, используя библиотеку urllib
, воспользуйтесь следующим кодом:
import urllib.request
# URL изображения, которое нужно загрузить
img_url = 'http://example.com/image.jpg'
# Имя файла, под которым изображение будет сохранено на вашем компьютере
file_path = 'local_image.jpg'
# Загрузка изображения
urllib.request.urlretrieve(img_url, file_path)
Этот код загружает изображение по указанному URL и сохраняет его на вашем компьютере под именем local_image.jpg
.
Пакетная загрузка изображений
Когда нужно обработать большое количество изображений в Python, удобно использовать цикл for
и блок try-except
для перехвата возможных ошибок при неудачной попытке загрузить изображение по тому или иному URL:
import urllib.request
# Список URL изображений
image_urls = ['http://example.com/image1.jpg', 'http://example.com/image2.jpg', ...]
# Директория для сохранения изображений
directory = '/path/to/your/directory/'
for url in image_urls:
# Определение имени файла по URL
filename = directory + url.split('/')[-1]
try:
urllib.request.urlretrieve(url, filename)
except Exception as e:
# Вывод сообщения об ошибке в случае неудачной загрузки
print(f'Не удалось загрузить {url}: {e}')
Данный код поочередно загружает каждое изображение, сохраняя его в указанной директории.
Поиск и загрузка
Если у вас нет готового списка URL изображений, но имеется веб-страница, где их можно найти, примените urllib
в сочетании с парсером, например, BeautifulSoup
:
import urllib.request
from bs4 import BeautifulSoup
import requests
# URL веб-страницы-галереи
webpage_url = 'http://example.com/gallery'
# Получение содержимого страницы
page = requests.get(webpage_url)
soup = BeautifulSoup(page.content, 'html.parser')
# В поисках тегов изображений на странице
image_tags = soup.find_all('img')
# Директория для сохранения изображений
directory = '/path/to/your/directory/'
for tag in image_tags:
# Извлечение URL изображения из атрибута 'src'
img_url = tag['src']
filename = directory + img_url.split('/')[-1]
try:
urllib.request.urlretrieve(img_url, filename)
except Exception as e:
# Обработка ошибок при неудачной загрузке
print(f'Невозможно загрузить {img_url}: {e}')
Пожалуйста, соблюдайте правила robots.txt
веб-сайта и законы об авторском праве при загрузке изображений.
Дополнительная проверка с помощью requests
Для более удобной обработки ошибок перед загрузкой изображения можно использовать библиотеку requests
:
import requests
img_url = 'http://example.com/image.jpg'
file_path = 'local_image.jpg'
response = requests.get(img_url, stream=True)
if response.status_code == 200:
with open(file_path, 'wb') as file:
# Запись файла по частям
for chunk in response.iter_content(1024):
file.write(chunk)
else:
# Обработка ошибок при невозможности загрузки изображения
print(f'Загрузить изображение не удалось: код ответа сервера {response.status_code}')
Оператор stream=True
позволяет загружать большие изображения по частям, не перегружая память.
Визуализация
Можно представить работу urllib
с изображениями следующим образом:
Представьте, что `urllib` – это курьер, который доставляет вам изображения из сети.
1. `urllib.request` находит изображение по его URL.
2. Функция `.urlretrieve()` загружает изображение по найденному адресу.
3. `filename` – это файл, под которым сохраняется изображение.
Несколько строк кода позволяют загрузить любое изображение из интернета:
import urllib.request
urllib.request.urlretrieve('http://example.com/picture.jpg', 'local-filename.jpg')
Теперь изображение сохранено на вашем диске.
Полезные материалы
- urllib — Работа с URL — Документация Python 3.12.2 — официальная документация модуля urllib.
- Как сохранить изображение на локальном диске с помощью Python, если известна его ссылка? – Stack Overflow — обсуждение вопроса на Stack Overflow.
- Руководство по применению библиотеки requests в Python – Real Python — подробности о библиотеке 'requests', изложенные простым языком.
- urllib.error — Классы исключений, которые вызываются urllib.request — Документация Python 3.12.2 — информация о возможных ошибках из официальной документации.
- Requests: HTTP для человека — Документация Requests 2.31.0 — детализированная документация по библиотеке 'requests'.
- Чтение и запись файлов в Python – PythonForBeginners.com — руководство по работе с файлами в Python.