Загрузка изображений c Python и Selenium
Здравствуйте! В сегодняшней статье мы рассмотрим, как автоматизировать загрузку изображений из интернета при помощи Python и Selenium. Итак, загрузка изображений из интернета является достаточно распространенным действием пользователей. Обычно, данное действие не занимает много времени, в основном оно уходит на поиск необходимого контента. Но что если необходимо загрузить несколько тысяч или десятков тысяч изображений. Конечно можно найти архив и скачать его или установить программу парсер.
Альтернативой является использование Selenium WebDriver для автоматизации данной задачи. В примере ниже, код извлекает все конечные точки img src с веб-сайта. Можно изменить код для сохранения изображений в облачном хранилище или непосредственно в ваших алгоритмах машинного обучения для прямой обработки.
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
# поисковой запрос в
# Google Images
query = "dogs"
# Создание экземпляра вебдрайвера
browser = webdriver.Chrome()
# Установка максимального размера окна
browser.maximize_window()
# Открытие посиковика в браузере
browser.get('https://images.google.com/')
# Находим поисковое окно
box = browser.find_element(By.CSS_SELECTOR, 'input[class="gLFyf"]')
# Вводим поисковой запрос в окно поиска
box.send_keys(query)
# Нажимаем кнопку Enter
box.send_keys(Keys.ENTER)
# Функция прокрутки вниз к результатам изображений
def scroll_to_bottom():
last_height = browser.execute_script('\
return document.body.scrollHeight')
while True:
browser.execute_script('\
window.scrollTo(0,document.body.scrollHeight)')
# установка ожидания загрузки
# можно увеличить время при медленном интернете
time.sleep(7)
new_height = browser.execute_script('\
return document.body.scrollHeight')
# нажать на кнопку "Больше результатов"
try:
browser.find_element(By.CSS_SELECTOR, ".YstHxe input").click()
# ожидание загрузки
time.sleep(3)
except:
pass
# проверка достижения нижнего края страницы
if new_height == last_height:
break
last_height = new_height
# Вызов функции
# Примечание: Если мы хотим загрузить несколько изображений,
# то вызывать функцию scroll_to_bottom() не нужно .
scroll_to_bottom()
# Цикл для захвата и сохранения изображений
for i in range(1, 50):
try:
# XPath для каждого изображения
img = browser.find_element(By.XPATH,
'//*[@id="islrg"]/div[1]/div[' +
str(i) + ']/a[1]/div[1]/img')
# Установка местоположения для загрузки
img.screenshot('Dog_' +
query + ' (' + str(i) + ').png')
# Каждый новый скринщот автоматический
# именуется
# задержка времени для избежания ошибок
time.sleep(0.2)
except:
# если искомое изображение не найдено,
# переходим к следующему
continue
# В конце закрываем драйвер
browser.close()
Одна интересная вещь в этом заключается в том, что старое содержимое будет загружаться в HTML только по мере его прокрутки в поле зрения. Это событие можно смоделировать в Selenium с помощью JavaScriptExecutor. Он используется для прокрутки вниз до конца страницы для загрузки следующих нескольких наборов изображений.
Таким образом, мы попытались загрузить изображения прямо с поисковика напрямую в компьютер. Следует помнить, что некоторые веб-сайты предлагают пользователям API для использования своих услуг. Обязательно ознакомьтесь с ним, потому что он будет более правильным подходом.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.