Как извлечь изображения из Интернета в Python

424
технологии 21.webp

Последнее обновление 08.01.2023 — Василий Иванов

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

Узнайте, как собирать изображения с любого веб-сайта с помощью Python и библиотеки BeautifulSoup.

Как и более общий анализ веб-страниц, анализ изображений — это метод загрузки содержимого веб-сайта. Это не является незаконным, но есть некоторые правила и рекомендации, которым вы должны следовать. Во-первых, вам следует избегать парсинга веб-сайта, если на нем прямо указано, что вы этого не хотите. Вы можете узнать это, найдя файл /robots.txt на целевом сайте.

По теме:  Жертвы вымогателя BlackMatter незаметно помогли с помощью секретного дешифратора

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

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

Настройка пакета Python

Прежде чем начать, вам нужно установить несколько пакетов. Если на вашем компьютере не установлен Python, посетите официальный веб-сайт python.org, чтобы загрузить и установить последнюю версию.

Затем откройте свой терминал в папке вашего проекта и активируйте виртуальную среду Python, чтобы изолировать ваши зависимости.

Наконец, установите запросы и пакеты BeautifulSoup, используя pip:

pip install bs4 requests

Очистка изображений с помощью Python

В этом руководстве по очистке изображений вы будете использовать библиотеку запросов для получения веб-страницы, содержащей целевые изображения. Затем вы передадите ответ с этого веб-сайта в BeautifulSoup, чтобы получить все адреса ссылок на изображения из тегов img. Затем вы запишете каждый файл изображения в папку для загрузки изображений.

Как получить URL-адреса изображений с помощью BeautifulSoup Python

Теперь продолжайте и создайте файл Python в корневой папке вашего проекта. Убедитесь, что вы добавили расширение .py к имени файла.

Каждый фрагмент кода в этом руководстве является продолжением предыдущего.

Откройте файл Python в любом хорошем редакторе кода и используйте следующий код для запроса веб-страницы:

import requests
URL = "imagesiteURL" # Replace this with the website's URL
getURL = requests.get(URL, headers={"User-Agent":"Mozilla/5.0"})
print(getURL.status_code)

Если приведенная выше программа выводит код ответа 200, запрос выполнен успешно. В противном случае вы можете убедиться, что ваше сетевое соединение стабильно. Кроме того, убедитесь, что вы указали действительный URL-адрес.

Теперь используйте BeautifulSoup для чтения содержимого веб-страницы с помощью html_parser:

from bs4 import BeautifulSoup

soup = BeautifulSoup(getURL.text, 'html.parser')

images = soup.find_all('img')
print(images)

Этот код создает список объектов, каждый из которых представляет изображение с веб-страницы. Однако из этих данных вам нужен текст атрибута src каждого изображения.

Чтобы извлечь источник из каждого тега img:

imageSources = []

for image in images:
imageSources.append(image.get('src'))

print(imageSources)

Повторно запустите код, и теперь адреса изображений должны появиться в новом списке (imageSources). Вы успешно извлекли каждый источник изображения с целевой веб-страницы.

Как сохранить изображения с помощью Python

Сначала создайте папку назначения для загрузки в корневом каталоге вашего проекта и назовите ее images.

Чтобы Python успешно загрузил изображения, их пути должны быть полными абсолютными URL-адресами. Другими словами, они должны включать префикс «http://» или «https://», а также полный домен веб-сайта. Если веб-страница ссылается на свои изображения, используя относительные URL-адреса, вам необходимо преобразовать их в абсолютные URL-адреса.

В простом случае, когда URL-адрес является абсолютным, инициирование загрузки — это просто запрос каждого изображения из ранее извлеченных источников:

for image in imageSources:
webs = requests.get(image)
open('images/' + image.split('/')[-1], 'wb').write(webs.content)

image.split(‘/’)[-1] ключевое слово разбивает ссылку на изображение по каждой косой черте (/). Затем он извлекает имя файла изображения (включая любое расширение) из последнего элемента.

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

Абсолютные URL-адреса могут быть довольно сложными, с множеством крайних случаев. К счастью, в пакете request.compat есть полезный метод, который называется urljoin. Этот метод возвращает полный URL-адрес с учетом базового URL-адреса и URL-адреса, который может быть относительным. Это позволяет вам разрешать значения, которые вы найдете в атрибутах href и src.

Окончательный код выглядит так:

from bs4 import BeautifulSoup
URL = "imagesiteURL" # Replace this with the website's URL
getURL = requests.get(URL, headers={"User-Agent":"Mozilla/5.0"})
soup = BeautifulSoup(getURL.text, 'html.parser')

images = soup.find_all('img')
resolvedURLs = []

for image in images:
src = image.get('src')
resolvedURLs.append(requests.compat.urljoin(URL, src))

for image in resolvedURLs:
webs = requests.get(image)
open('images/' + image.split('/')[-1], 'wb').write(webs.content)

Никогда не хватайте данных изображения

Многие проекты по распознаванию изображений зашли в тупик из-за недостаточного количества изображений для обучения модели. Но вы всегда можете извлечь изображения с веб-сайтов, чтобы расширить хранилище данных. И, к счастью, Python — это мощный инструмент для очистки изображений, который вы можете использовать постоянно, не опасаясь, что его цена будет завышена.

Если вы заинтересованы в извлечении других типов данных из Интернета, вы можете узнать, как использовать Python для общего веб-скрейпинга.