CoderCastrov logo
CoderCastrov
Selenium

Извлечение данных из Интернета с помощью Selenium

Извлечение данных из Интернета с помощью Selenium
просмотров
6 мин чтение
#Selenium

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

Selenium - это API, которое позволяет выполнять практически все операции, которые можно выполнить в браузере. С помощью этого API мы можем извлекать данные, перемещаться по странице, вводить данные в поля ввода, получать свойства HTML-блоков и многое другое. Однако для использования Selenium необходим WebDriver. Этот WebDriver позволяет автоматизировать практически все операции, которые можно выполнить в любом установленном на вашем компьютере браузере. Поддерживаются многие браузеры, такие как Firefox, Google Chrome, Opera, Microsoft Edge.

Для извлечения данных я буду использовать WebDriver для Google Chrome. Чтобы загрузить этот WebDriver, следуйте приведенным ниже инструкциям.

· Для Chrome: Вам необходимо загрузить драйвер, соответствующий вашей версии, с сайта https://chromedriver.storage.googleapis.com/index.html.

(Чтобы узнать версию: Chrome > Справка > О Google Chrome)

(Когда я писал эту статью, я использовал версию 103.0.5060.66, поэтому я загрузил драйвер версии 103.0.5060.53.)

Вы можете загрузить файл из этой версии, соответствующий характеристикам вашей системы. Я использую 64-разрядную версию Windows, но драйвер выпускается в 32-разрядной версии, поэтому я могу загрузить версию для win32.

· Opera: https://github.com/operasoftware/operachromiumdriver/releases

· Firefox: https://github.com/mozilla/geckodriver/releases

· Microsoft Edge: https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

В своей повседневной жизни я использую Opera, но для Selenium я рекомендую использовать Google Chrome. Потому что в Opera у меня возникли проблемы на нескольких сайтах.

Введение

Сначала нам нужно установить нашу библиотеку. Мы можем сделать это, введя в окно CMD “pip install selenium”.

После завершения установки библиотеки мы можем начать создание проекта. Давайте начнем с добавления необходимых нам библиотек.

Мы используем библиотеку “warnings”, чтобы предотвратить вывод ненужных предупреждений на экране терминала.

В этом проекте мы получим название отеля, его местоположение, тип проживания, рейтинг, количество отзывов, особенности отеля и информацию о цене от объявлений отеля на сайте https://www.etstur.com/Antalya-Otelleri?check_in=13.07.2022&check_out=18.07.2022&adult_1=2**”.

Мы можем связать WebDriver с Python следующим образом.

· Здесь мы указываем путь к загруженному нами драйверу Chrome внутри функции “webdriver.Chrome()” (например, если вы используете Opera, вы будете использовать функцию “webdriver.Opera()”).

· Функция “set_window_size” позволяет установить фиксированный размер окна, потому что изменение размера может привести к изменению HTML-кода, что может привести к неработоспособности наших кодов для извлечения данных.

· Функция “set_windows_position” определяет место открытия драйвера (устанавливая (0,0), мы гарантируем, что он откроется в левом верхнем углу).

· Мы указываем адрес сайта в функции “get()”.

· Я добавил функцию input, чтобы избежать начала извлечения данных сразу после открытия сайта, потому что сайт может потребовать время для загрузки (если мы попытаемся извлечь данные до загрузки, мы получим ошибку). Поэтому мы отправляем функции данные, нажимая клавишу Enter, и начинаем извлечение данных там. После этого мы начнем писать содержимое функции.

Методы извлечения данных

Использование Selenium основано на перемещении по блокам HTML и выполнении операций внутри них. Существует несколько методов перемещения по этим блокам HTML, и я расскажу о каждом из них по отдельности.

Для поиска элементов на странице существуют различные стратегии. Вы можете выбрать наиболее подходящую для вашей ситуации. Selenium предоставляет следующие функции для поиска элементов на странице:

· find_element() -> Эта функция находит только один блок HTML и выполняет операцию.

· find_elements() -> Эта функция находит все блоки HTML в соответствии с критериями поиска и возвращает нам список.

В Selenium есть 8 способов извлечения данных. Они включают в себя следующее:

1. ID

Данные могут быть извлечены из HTML блоков по идентификатору (ID). На этой странице нет примера извлечения данных по ID, поэтому я покажу, как удалить значение, вставить новое значение и показать, как это сделать, используя комбинацию клавиш CTRL+A для выделения всего текста в поле, DELETE для удаления значения и ввод нового примера.

После щелчка правой кнопкой мыши на странице и выбора пункта "Инспектировать элемент" можно найти нужный блок и получить его идентификатор, чтобы написать код. Функция "send_keys()" позволяет вводить значения с клавиатуры или отправлять определенные клавиши в указанный элемент.

2. XPATH

Каждому блоку в HTML коде соответствует уникальный XPATH. С помощью Selenium мы можем находить элементы по этому XPATH. Чтобы получить XPATH элемента, нужно щелкнуть правой кнопкой мыши на нем -> Копировать -> Копировать Xpath.

Здесь мы получаем XPATH элемента, в котором содержится имя отеля, и передаем его в функцию. Эта функция возвращает элемент, и чтобы получить текст внутри этого элемента, мы используем функцию "text()".

3. NAME

Данные, связанные с атрибутом name, могут быть получены из HTML блоков. Поскольку на этой странице нет данных, связанных с атрибутом ID, давайте отправим примерное значение для полей минимальной и максимальной цены. Затем мы найдем кнопку "Поиск" с помощью XPATH и выполним клик.

После того, как мы найдем нужный блок, получим значение атрибута NAME и напишем соответствующий код. Я добавил функцию "sleep", чтобы убедиться, что введенные значения отображаются.


Используется для извлечения данных на основе значения, указанного внутри тега <a> в HTML-блоках. Когда мы указываем значение "LINK_TEXT", возвращается тег, содержащий полное совпадение с указанным значением, а когда мы указываем значение "PARTIAL_LINK_TEXT", возвращается тег, содержащий указанное значение.

Давайте рассмотрим два тега <a>, которые находятся на странице. Мы попытаемся получить значения атрибута "href" для этих двух тегов. Для этого мы находим тег <a> и затем, используя метод "get_attribute", можем получить любое из его свойств (например, style, href, id, class и т. д.). Здесь я получил URL-адреса, находящиеся внутри этих тегов.

5. TAG_NAME

Метод "TAG_NAME" позволяет найти все элементы с помощью указанного HTML тега, таких как a, div, p, h1, li и т. д.

Здесь я использовал тег <a> для извлечения данных. С помощью метода "find_elements()" я получил все элементы с этим тегом, и эта функция вернула нам список. Если бы я использовал метод "find_element()", то он бы взял только первый найденный элемент с тегом, и остальные элементы бы не были получены. Затем, перебирая этот список, я попытался вывести непустые значения.

6. CLASS_NAME

С помощью этого метода мы ищем элементы по указанному классу. Поскольку только у ценовой информации есть свой уникальный класс, этот код вернул нам все цены, которые есть на странице.

7. CSS_SELECTOR

CSS_SELECTOR работает похожим образом на метод CLASS_NAME. В CSS_SELECTOR можно выбирать элементы по значению класса определенного тега. Однако, если тег не имеет значения, можно использовать ".example" для выбора элементов со значением класса "example" во всех тегах. Поэтому он очень похож на CLASS_NAME.

БОНУС

"driver.find_element(By.XPATH, '//h2[contains(text(), "Gold Island")]')"

Здесь мы используем метод "contains()", чтобы найти тег h2, содержащий текст "Gold Island".

Благодарю вас за прочтение этой статьи, в которой я рассказал о способах извлечения данных с использованием Selenium в Python. Не забудьте проверить и другие мои статьи.