Здравствуйте! В сегодняшней статье рассмотрим, как автоматизировать загрузку изображений из интернета при помощи Python и Selenium . Итак, загрузка изображений из интернета является достаточно распространенным действием пользователей. Обычно, данное действие не занимает много времени, в основном оно уходит на поиск...

Загрузка изображений 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 для использования своих услуг. Обязательно ознакомьтесь с ним, потому что он будет более правильным подходом.