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
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
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ć:
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.
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.
GO TO FULL VERSION