CodeGym /Kurs Javy /Python SELF PL /Podstawowe podejścia do przeglądania kilku stron

Podstawowe podejścia do przeglądania kilku stron

Python SELF PL
Poziom 38 , Lekcja 2
Dostępny

1. Użycie przycisku „Dalej”

Jeśli na stronie znajduje się przycisk lub link „Dalej” do przejścia na następną stronę, możesz skonfigurować pętlę, aby wykonać kliknięcia na tym przycisku, dopóki jest dostępny.

Przykład kodu

Python

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
import time

def initialize_driver():
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    return driver

def open_page(driver, url):
    driver.get(url)

def collect_data(driver):
    # Przykład zbierania danych z obecnej strony
    items = driver.find_elements(By.CLASS_NAME, "item_class")
    for item in items:
        print(item.text)  # Tutaj można zapisać lub przetworzyć dane
    
def click_next_button(driver):
    try:
        next_button = driver.find_element(By.LINK_TEXT, "Next")
        next_button.click()
        return True
    except NoSuchElementException:
        return False  # Przycisk nie został znaleziony, czyli jesteśmy na ostatniej stronie

def main():
    driver = initialize_driver()
    open_page(driver, "https://example.com/page1")

    try:
        while True:
            collect_data(driver)
            if not click_next_button(driver):
                break  # Wyjście z pętli, jeśli przycisk "Next" jest niedostępny
            time.sleep(2)  # Opóźnienie dla załadowania następnej strony
    finally:
        driver.quit()

main()

Wyjaśnienie kodu

initialize_driver() — inicjalizacja drivera.
open_page() — otwarcie pierwszej strony, aby rozpocząć pracę.
collect_data() — funkcja do zbierania danych z obecnej strony.
click_next_button() — funkcja, która znajduje i klika przycisk „Next”. Jeśli przycisk jest niedostępny, zwraca False, co oznacza zakończenie przeglądania.
Pętla w main() — główna pętla do przeglądania stron. Kończy pracę, kiedy przycisk „Next” nie jest już dostępny.

2. Paginacja z użyciem numerów stron

Na niektórych stronach pojawiają się numerowane linki do stron (np. „1”, „2”, „3” i tak dalej). W takich przypadkach możesz zebrać listę linków i przejść po nich kolejno.

Przykład kodu

Python

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

def initialize_driver():
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    return driver

def open_page(driver, url):
    driver.get(url)

def collect_data(driver):
    items = driver.find_elements(By.CLASS_NAME, "item_class")
    for item in items:
        print(item.text)

def go_to_page(driver, page_number):
    page_link = driver.find_element(By.LINK_TEXT, str(page_number))
    page_link.click()

def main():
    driver = initialize_driver()
    open_page(driver, "https://example.com/page1")

    try:
        total_pages = 5  # Podaj całkowitą liczbę stron, jeśli znana
        for page in range(1, total_pages + 1):
            collect_data(driver)
            if page < total_pages:  # Nie przechodź na następną stronę po ostatniej
                go_to_page(driver, page + 1)
                time.sleep(2)  # Opóźnienie dla załadowania następnej strony
    finally:
        driver.quit()

main()

Wyjaśnienie kodu

go_to_page() — funkcja, która znajduje link do odpowiedniej strony na podstawie jej numeru i przechodzi do niej.
Pętla w main() — używa zmiennej total_pages, aby określić liczbę stron. Pętla przechodzi na kolejną stronę, aż do osiągnięcia ostatniej.

3. Zmiana URL dla każdej strony

Niektóre strony mają prostą strukturę URL, gdzie każda strona jest identyfikowana numerem w URL, np. https://example.com/page/1, https://example.com/page/2 itd. Wtedy można po prostu zmieniać URL i ładować odpowiednią stronę, unikając konieczności szukania elementów na stronie.

Przykład kodu

Python

from selenium import webdriver
import time

def initialize_driver():
    driver = webdriver.Chrome()
    driver.implicitly_wait(10)
    return driver

def open_page(driver, url):
    driver.get(url)

def collect_data(driver):
    items = driver.find_elements_by_class_name("item_class")
    for item in items:
        print(item.text)

def main():
    driver = initialize_driver()

    try:
        total_pages = 5  # Podaj całkowitą liczbę stron, jeśli znana
        base_url = "https://example.com/page/"
        
        for page_number in range(1, total_pages + 1):
            url = f"{base_url}{page_number}"
            open_page(driver, url)
            collect_data(driver)
            time.sleep(2)  # Opóźnienie dla załadowania następnej strony
    finally:
        driver.quit()

main()

Wyjaśnienie kodu

Zmienne base_url zawiera bazowy URL strony. Pętla uzupełnia go numerem strony i kolejno otwiera każdą stronę.
Pętla generuje URL każdej strony i wykonuje zbieranie danych bez klikania elementów. To minimalizuje prawdopodobieństwo wystąpienia błędów.

4. Wskazówki dotyczące optymalizacji

  • Minimalizuj oczekiwania i kliki na dynamicznych elementach: Użycie linków i URL jest bardziej stabilne niż klikanie przycisków ładowanych przez JavaScript.
  • Użyj timerów oczekiwania z minimalnym opóźnieniem: Przy przejściu na nową stronę używaj krótkiego opóźnienia time.sleep(2), aby elementy zdążyły się załadować, ale nie czekaj dłużej niż to konieczne.
  • Zbieraj dane po załadowaniu całej strony: Upewnij się, że dane na stronie zostały w pełni załadowane przed rozpoczęciem ich zbierania. Użyj implicitly_wait dla pewniejszego znajdywania elementów.
  • Logowanie: Wprowadź logowanie, aby rejestrować aktualną stronę, błędy i udane przejścia. To ułatwi diagnozowanie skryptu podczas jego wykonywania.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION