Создание веб-скрапера на Python с помощью Selenium

Создание веб-скрапера на Python с помощью Selenium

В этой статье мы разберем, как написать веб-скрапер (web scraper) с помощью Selenium. Веб-скрапинг – это поиск нужной информации в Интернете или автоматизация какой-либо веб-задачи. Вам потребуются базовые навыки работы с терминалом, а именно знание команд cd и mkdir. Также у вас должны быть установлены pip и Python3.

Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.

Установка Selenium

Итак, одним из модулей для веб-скрапинга в Python3 является Selenium. Чтобы установить Selenium в свою систему, введите в терминале или командной строке следующую команду:

pip3 install selenium

Установка Selenium в виртуальном окружении

Если вы решите пойти по альтернативному пути, включающему установку модуля виртуальной среды, то введите в командной строке pip3 install virtualenv. После этого перейдите в директорию рабочего стола и создайте новую папку:

cd desktop
mkdir selenium_basics

Теперь смените директорию на selenium_basics и создайте виртуальное окружение:

cd selenium_basics
virtualenv -p python .

Если в вашем терминале появится сообщение, подобное тому, что вы видите на скриншоте ниже, то все прошло успешно:

Создание виртуального окружения

Теперь активируйте виртуальную среду, введя в терминале следующую команду:

source Scripts/activate

А для Windows введите в командной строке:

Scripts/activate

Если вы увидите, что в командной строке появилось что-то подобное, поздравляем, ваша виртуальная среда готова и активирована:

Теперь мы можем приступить к основной части! Введите:

pip3 install selenium

Должно получиться что-то вроде этого:

Установка Selenium в виртуальное окружение

Установка chromedriver

Итак, вы успешно установили Selenium в виртуальном окружении. Теперь создайте папку с именем src и перейдите в нее:

mkdir src
cd src

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

Создайте новый файл Python и назовите его как угодно. Файл в примере называется tut, сокращенно от tutorial. Вы можете использовать любой редактор, мы же будем использовать vim.

Для запуска тестов Selenium нам необходимо установить программное обеспечение. Так, для запуска тестов в Chrome у есть chromedriver.exe, для Firefox – geckodriver.exe, а для Microsoft Edge – edge driver. Мы будем работать на базе Chrome, следовательно, устанавливаем chromedriver.exe. Это можно сделать, перейдя по ссылке.

Обратите внимание, что chromedriver.exe устанавливается в зависимости от вашей версии Chrome. Чтобы узнать версию вашего браузера, введите в его адресной строке chrome://version. Наша версия Chrome — 87.

Выбор версии ChromeDriver

Поэтому выбираем соответствующую версию ChromeDriver и устанавливаем файл win32.zip. Распаковываем архив в папку src.

Веб-скрапинг YouTube при помощи Selenium

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

Теперь давайте немного поработаем над кодом. Сначала импортируем класс webdriver из Selenium:

from selenium import webdriver

Затем укажем местоположение драйвера Chrome:

driver = webdriver.Chrome('/path/to/chromedriver.exe')

В конце должен стоять ‘/chromedriver.exe’. После этого нам нужно открыть YouTube, поэтому пишем:

drive.get('https://www.youtube.com')

Если вы запустите код сейчас, через несколько секунд автоматически откроется окно YouTube:

Окно YouTube

Если это произошло, поздравляем — вы только что написали свою первую программу автоматизации.

Теперь нам нужно ввести что-то в поле поиска. Для перехода в DevTools на клавиатуре нажмите Ctrl+Shift+I для Windows. Для пользователей Mac — command+option+I. Обратите внимание, что эти команды специфичны для Chrome.

Справа от страницы YouTube откроются инструменты разработчика – DevTools. Нажмите на кнопку со стрелочкой в левом углу верхней панели DevTools.

Теперь наведите курсор мыши на поисковую строку YouTube и щелкните по ней:

Выбор элемента в DevTools режиме

Вы увидите, что один из разделов HTML-кода стал голубым. Щелкните правой кнопкой мыши по этому разделу и скопируйте XPath элемента:

Копирование XPath элемента строки поиска

После этого перейдите к своему коду и введите:

driver.find_element_by_xpath('#Сюда вставьте xPath').send_keys('#То, что вы хотите искать')

.send_keys() отправляет какой-либо текст и, в некоторых случаях, комбинации клавиш.

Мы также хотим, чтобы Selenium автоматически нажимал кнопку поиска. Скопируем XPath для элемента кнопки, как делали это для строки поиска:

Копирование XPath элемента кнопки поиска

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

driver.find_element_by_xpath('#Сюда вставьте XPath').click()

Здесь довольно понятный код, который говорит: найди элемент с этим XPath и щелкни по нему. Запустив программу,

…вы увидите, что поиск был автоматически завершен. Теперь вам остается только нажать на нужное видео.

Мы можем сделать эту программу еще более интересной. Сначала импортируем модуль time, а затем попросим пользователя указать, что он хочет найти. Чтобы убедиться, что у нас достаточно времени, чтобы успеть щелкнуть по окну chromedriver, мы можем указать программе сделать паузу на две секунды, прежде чем продолжить. Примерно так:

import time
ask_search = input(str('What do you want to search: '))
time.sleep(2)

Затем мы отредактируем эту строку:

driver.find_element_by_xpath('//*[<a href="http://twitter.com/id" target="_blank" rel="noreferrer noopener">@id</a>="search"]').send_keys("Whatever you want to search")

И изменим её на:

driver.find_element_by_xpath('//*[<a href="http://twitter.com/id" target="_blank" rel="noreferrer noopener">@id</a>="search"]').send_keys(ask_search)

Итак, мы запускаем этот сценарий, и вводим, например, Dani:

What do you want to search: Dani

И получаем в окне chromedriver:

На YouTube выведены результаты поиска Dani - соответствующий канал.

Готово! Теперь мы можем искать любой текст, который нам нужен, и поиск будет происходить автоматически!

Вот весь код целиком:

from selenium import webdriver
import time
driver = webdriver.Chrome('/path/to/chromedriver.exe')
ask_search = input(str('What do you want to search: '))
time.sleep(2)
driver.get('https://www.youtube.com')
driver.find_element_by_xpath('//*[@id="search"]').send_keys("Dani")
driver.find_element_by_xpath('//*[@id="search-icon-legacy"]').click()

Перевод статьи «Basics of Selenium in Python3».

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

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