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