CodeGym /Kursy /Python SELF PL /Przemieszczanie się po wielu stronach z minimalnym użycie...

Przemieszczanie się po wielu stronach z minimalnym użyciem dynamicznych elementów

Python SELF PL
Poziom 38 , Lekcja 1
Dostępny

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

Python

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.

Python

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ąć.

Python

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.

Python

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.

Python

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.

Python

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.

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