1. Przygotowanie do nawigacji
Zanim przystąpimy do naszej wielkiej podróży, musimy się przygotować, wyposażeni w odpowiedni sprzęt: Selenium i odrobinę sprytu. Zakładamy, że już wiesz, jak skonfigurować Selenium i driver do przeglądarki, więc ruszamy!
Konfiguracja drivera
from selenium import webdriver
# Uruchomienie drivera przeglądarki, na przykład Chrome
driver = webdriver.Chrome()
# Otwieramy pierwszą stronę naszej przygody
driver.get("http://example.com/start-page")
Jak na razie wszystko wygląda standardowo — otwieramy przeglądarkę i ładujemy stronę startową. Ale teraz zaczyna się zabawa: nie chcemy zatrzymać się jedynie na jednej stronie. Chcemy odwiedzić każdą sąsiednią!
2. Paginacja: spacer po stronach
Najprostszym i najbardziej przyjaznym sposobem nawigacji po stronach jest paginacja. Wszyscy widzieliście te małe, urocze numerki na dole strony, prawda? Są jak drogowskazy: „Twój następny przystanek — strona 2”.
Ekstrakcja danych ze stron
Zanim zaczniemy podróżować, chcemy zebrać informacje z bieżącej strony. Powiedzmy, że to listy produktów lub nagłówki artykułów.
def extract_data():
# Znajdujemy wszystkie interesujące nas elementy na stronie, na przykład nagłówki
titles = driver.find_elements_by_class_name("item-title")
for title in titles:
print(title.text) # Tak, po prostu wypisujemy tekst, ale możesz go zapisać gdziekolwiek
extract_data()
Jeśli przegapiłeś wcześniejsze wykłady, ten kawałek kodu wyszukuje wszystkie nagłówki z klasą item-title i je wypisuje.
Nawigacja do następnej strony
Teraz, gdy mamy dane, czas ruszyć dalej. Paginacja często występuje w postaci przycisków z linkami do następnej lub poprzedniej strony. Musimy znaleźć te przyciski i je kliknąć.
def go_to_next_page():
try:
# Znajdujemy przycisk następnej strony i klikamy go
next_button = driver.find_element_by_link_text("Next")
next_button.click()
except NoSuchElementException:
# Jeśli przycisku nie ma, oznacza to koniec
print("Koniec listy stron.")
Ta funkcja wyszukuje link z tekstem „Next”. Jeśli go znajdzie, klika go, przechodząc do następnej strony. Jeśli nie, nasz bot rozumie, że dotarł do końca internetu... no przynajmniej tej sekwencji stron.
3. Cykl spacerków po stronach
Czego nam brakuje do pełni szczęścia? Oczywiście, pętli! Połączmy to wszystko w jedną wygodną pętlę, aby nasz bot mógł obejść wszystkie dostępne strony, jak prawdziwy profesjonalista.
while True:
extract_data() # Zbieramy dane z bieżącej strony
go_to_next_page() # Przechodzimy do następnej
time.sleep(2) # Trochę odpoczynku, żeby nie przestraszyć serwera
I oto nasz bot odważnie przemierza wszystkie strony, na których można kliknąć przycisk „Next”. Ten kod będzie się wykonywał, dopóki strony się nie skończą. Pamiętajcie, że mała przerwa między zapytaniami to wasza przyjaźń z serwerem. Nikt nie lubi spamerów, zwłaszcza administratorzy stron.
4. Dynamiczna interakcja
Przyjaciele, nie wszystko jest tak proste w życiu, jak w tych przykładach z paginacją. Czasami strona zachowuje się jak nieuchwytny ninja, ładując dane dynamicznie w trakcie przewijania. Bez obaw, i z tym sobie poradzimy.
Wyraźne oczekiwanie
Oczekiwania pozwalają Twojemu kodowi trochę „pomedytować” do momentu, gdy wymagany element stanie się dostępny. To szczególnie przydatne, gdy zawartość ładuje się dopiero po chwili.
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def wait_for_element(locator):
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CLASS_NAME, locator))
)
return element
except TimeoutException:
print("Element nie został znaleziony.")
Dzięki tej funkcji Twój bot będzie w harmonii z dynamicznie ładującą się zawartością, czekając, aż elementy staną się dostępne.
Przewijanie strony
Przy dynamicznej zawartości, zawartej na takich magicznych stronach jak nieskończone przewijanie, może być konieczne przewijanie strony w dół, aby więcej elementów się załadowało.
def scroll_down():
# Używamy JavaScript do przewinięcia w dół
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
Skrypt w JavaScript pomaga w płynnym przewijaniu w dół, pozwalając stronie na załadowanie zawartości. Tego triku można używać w pętli, aby obejść nieskończone przewijanie.
5. Ciekawostki i triki
Wychodzenie poza przykłady — to jak tomik przygód pełen niespodzianek. Wyobraź sobie, że Twój bot, tak jak Ty, musi być gotowy na różne scenariusze.
Jeśli przycisku „Next” nie ma, ale jest paginacja z numerami stron, użyj dynamicznego podejścia, wstawiając numer bezpośrednio w URL. A jeśli Twoja strona nagle postanowi stać się ninja i ukryć niektóre strony, dostosuj swoje skrypty, aby mogły się dostosować, pozostając gotowym na niespodzianki.
GO TO FULL VERSION