JavaRush /Курсы /Python SELF /Извлечение текстов и атрибутов с помощью Selenium

Извлечение текстов и атрибутов с помощью Selenium

Python SELF
36 уровень , 2 лекция
Открыта

Привет, будущие мастера автоматизации! Сегодня мы изучим, как при помощи Selenium можно извлекать текст и атрибуты элементов на веб-странице. Это мощный инструмент в вашем арсенале, ведь в мире веб-скрейпинга главное — уметь добывать информацию. Готовы вычленить полезные данные из интернетовских недр? Тогда начнем!

1. О чем эта лекция?

  • Основы извлечения данных: Как вытягивать текст из HTML-элементов, что само по себе уже звучит как подвиг.
  • Получение атрибутов: Как извлекать такие вкусности, как ссылки (href) и картинки (src), чтобы потом сделать с ними что-то невероятное.
  • Примеры из жизни: Попробуем на практике извлечь данные из таблиц и списков на веб-странице. Ведь как говорил великий программист: "Пока не пощупал код руками — не понял до конца".

2. Извлечение текстов из элементов

Итак, представим, что у вас есть красивый веб-сайт с кучей полезной информации. Вам нужно взять текст с элементов вроде заголовков, параграфов и других HTML-елементов. Как быть? Здесь на помощь приходит Selenium.

Пример

Python

from selenium import webdriver

# Настраиваем драйвер для Chrome
driver = webdriver.Chrome()

# Открываем сайт
driver.get("https://example.com")

# Находим элемент по классу и извлекаем текст
element = driver.find_element_by_class_name("example-class")
text = element.text
print("Извлеченный текст:", text)

# Не забываем закрыть браузер
driver.quit()

Здесь мы используем метод .text для получения текстового содержимого элемента. Легче, чем выучить все исключения в Python, правда?

3. Извлечение атрибутов из элементов

Текст — это здорово, но что делать, если нужно получить что-то более специфическое, например, URL ссылки или ссылку на изображение? Selenium и здесь вас не подведет.

Пример

Python

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://example.com")

# Находим элемент по селектору CSS и извлекаем атрибут 'href'
link_element = driver.find_element_by_css_selector("a.link-class")
link_href = link_element.get_attribute("href")
print("URL ссылки:", link_href)

# Находим элемент по ID и извлекаем атрибут 'src'
img_element = driver.find_element_by_id("logo")
img_src = img_element.get_attribute("src")
print("URL изображения:", img_src)

driver.quit()

Как видно, всё то же самое, только вместо .text используем метод .get_attribute("имя_атрибута"). Лёгкие в освоении методы, но весьма мощные в использовании.

4. Применение методов на практике

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

Извлечение данных из таблиц

Допустим, вам необходимо извлечь все строки из таблицы на сайте и вывести их в консоль. Вот как это можно реализовать:

Python

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://example.com")

# Находим таблицу по ID
table = driver.find_element_by_id("example-table")

# Находим все строки таблицы
rows = table.find_elements_by_tag_name("tr")

for row in rows:
    # Находим все ячейки в текущей строке
    cells = row.find_elements_by_tag_name("td")
    for cell in cells:
        print(cell.text, end=' ')
    print()

driver.quit()

Сначала мы находим саму таблицу, затем перебираем все её строки и ячейки, извлекая и выводя их текст. Это как распутывать сложную паутину, но в итоге всё становится простым и понятным!

5. Типичные ошибки и как их избежать

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

Когда вы работаете с динамическими страницами, время может стать вашим врагом. Если вы пытаетесь получить текст или атрибут элемента, который еще не прогрузился, получите ошибку NoSuchElementException. Это всё равно что пытаться поймать сюрприз до его прихода. Чтобы избежать этого, используйте явные ожидания (WebDriverWait) вместо того, чтобы полагаться на чудо.

Python

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()

driver.get("https://example.com")

try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "lazy-class"))
    )
    print(element.text)
finally:
    driver.quit()

Здесь мы используем WebDriverWait и expected_conditions для ожидания загрузки элемента. Это как дождаться полной готовности блюда, чтобы потом насладиться его вкусом.

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ