CodeGym /Kursy /Python SELF PL /Wyciąganie tekstów i atrybutów za pomocą Selenium

Wyciąganie tekstów i atrybutów za pomocą Selenium

Python SELF PL
Poziom 36 , Lekcja 2
Dostępny

Cześć, przyszli mistrzowie automatyzacji! Dziś nauczymy się, jak za pomocą Selenium można wyciągać tekst i atrybuty elementów na stronie internetowej. To potężne narzędzie w Twoim arsenale, bo w świecie web-scrapingu najważniejsze to umieć zdobywać informacje. Gotowi wyciągnąć przydatne dane z internetowych głębin? No to zaczynamy!

1. O czym jest ten wykład?

  • Podstawy wyciągania danych: Jak wyciągać tekst z elementów HTML, co samo w sobie brzmi jak wyczyn.
  • Pobieranie atrybutów: Jak wyciągać takie smaczki, jak linki (href) i obrazki (src), żeby potem zrobić z nimi coś niesamowitego.
  • Przykłady z życia: Spróbujemy w praktyce wyciągnąć dane z tabel i list na stronie internetowej. Jak powiedział wielki programista: "Dopóki nie dotkniesz kodu własnymi rękami – nie zrozumiesz do końca".

2. Wyciąganie tekstów z elementów

Załóżmy, że masz piękną stronę internetową z mnóstwem przydatnych informacji. Musisz wziąć tekst z takich elementów jak nagłówki, akapity i inne elementy HTML. Co robić? Tutaj na pomoc przychodzi Selenium.

Przykład

Python

from selenium import webdriver

# Konfigurujemy sterownik dla Chrome
driver = webdriver.Chrome()

# Otwieramy stronę
driver.get("https://example.com")

# Znajdujemy element po klasie i wyciągamy tekst
element = driver.find_element_by_class_name("example-class")
text = element.text
print("Wyciągnięty tekst:", text)

# Nie zapomnij zamknąć przeglądarki
driver.quit()

W tym przypadku używamy metody .text, aby pobrać zawartość tekstową elementu. Łatwiejsze niż nauczenie się wszystkich wyjątków w Pythonie, prawda?

3. Wyciąganie atrybutów z elementów

Tekst – to świetne, ale co, jeśli trzeba dostać coś bardziej specyficznego, np. URL linka lub odnośnik do obrazka? Selenium i tutaj Cię nie zawiedzie.

Przykład

Python

from selenium import webdriver

driver = webdriver.Chrome()

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

# Znajdujemy element po selektorze CSS i wyciągamy atrybut 'href'
link_element = driver.find_element_by_css_selector("a.link-class")
link_href = link_element.get_attribute("href")
print("URL linka:", link_href)

# Znajdujemy element po ID i wyciągamy atrybut 'src'
img_element = driver.find_element_by_id("logo")
img_src = img_element.get_attribute("src")
print("URL obrazka:", img_src)

driver.quit()

Jak widać, wszystko to samo, tylko zamiast .text używamy metody .get_attribute("nazwa_atrybutu"). Proste w nauce metody, ale bardzo potężne w użyciu.

4. Zastosowanie metod w praktyce

Przechodzimy od teorii do praktyki, bo programiści zazwyczaj nie lubią zbyt długo pozostawać w abstrakcji. Zobaczmy przykład, w którym wyciągamy dane z tabeli na stronie internetowej.

Wyciąganie danych z tabel

Załóżmy, że musisz wyciągnąć wszystkie wiersze z tabeli na stronie i wypisać je w konsoli. Oto jak można to zrealizować:

Python

from selenium import webdriver

driver = webdriver.Chrome()

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

# Znajdujemy tabelę po ID
table = driver.find_element_by_id("example-table")

# Znajdujemy wszystkie wiersze tabeli
rows = table.find_elements_by_tag_name("tr")

for row in rows:
    # Znajdujemy wszystkie komórki w bieżącym wierszu
    cells = row.find_elements_by_tag_name("td")
    for cell in cells:
        print(cell.text, end=' ')
    print()

driver.quit()

Najpierw znajdujemy samą tabelę, potem przechodzimy przez wszystkie jej wiersze i komórki, wyciągając i wypisując ich tekst. To jak rozplątywanie skomplikowanej sieci, ale ostatecznie wszystko staje się proste i zrozumiałe!

5. Typowe błędy i jak ich uniknąć

Zanim wyruszymy w kodową przygodę z wyciąganiem danych, porozmawiajmy o typowych błędach, z którymi możesz się spotkać.

Kiedy pracujesz z dynamicznymi stronami, czas może stać się Twoim wrogiem. Jeśli próbujesz pobrać tekst lub atrybut elementu, który jeszcze się nie załadował, dostaniesz błąd NoSuchElementException. To tak, jakby próbować złapać niespodziankę, zanim nadejdzie. Aby tego uniknąć, używaj jawnych oczekiwań (WebDriverWait) zamiast liczyć na cud.

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()

W tym przypadku używamy WebDriverWait i expected_conditions, aby poczekać na załadowanie się elementu. To jak czekanie na pełne przygotowanie potrawy, żeby potem cieszyć się jej smakiem.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION