Привіт, майбутні майстри автоматизації! Сьогодні ми вивчимо, як за допомогою Selenium можна видобувати текст і атрибути елементів на веб-сторінці. Це потужний інструмент у вашому арсеналі, адже у світі веб-скрейпінгу головне — вміти здобувати інформацію. Готові витягнути корисні дані з інтернетівських глибин? Тоді починаємо!
1. Про що ця лекція?
- Основи видобування даних: Як витягувати текст із HTML-елементів, що само по собі вже звучить як подвиг.
- Отримання атрибутів: Як видобувати такі смаколики, як посилання
(href)і зображення(src), щоб потім зробити з ними щось неймовірне. - Приклади з життя: Спробуємо на практиці видобути дані з таблиць і списків на веб-сторінці. Адже як казав великий програміст: "Поки не помацаєш код руками — не зрозумієш до кінця".
2. Видобування текстів із елементів
Отже, уявімо, що у вас є красивий веб-сайт з купою корисної інформації. Вам потрібно взяти текст із елементів на кшталт заголовків, параграфів і інших HTML-елементів. Як бути? Тут на допомогу приходить Selenium.
Приклад
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 і тут вас не підведе.
Приклад
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. Застосування методів на практиці
Переходимо від теорії до практики, тому що програмісти зазвичай не люблять надто довго затримуватись в абстракції. Давайте розглянемо приклад, коли ми видобуваємо дані з таблиці на веб-сторінці.
Видобування даних із таблиць
Припустимо, вам потрібно видобути всі рядки з таблиці на сайті і вивести їх у консоль. Ось як це можна реалізувати:
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) замість того, щоб покладатись на диво.
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 для очікування завантаження елемента. Це як дочекатися повної готовності страви, аби потім насолодитися її смаком.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ