CodeGym /Kurslar /Python SELF AZ /Birkaç səhifəni dolaşmaq üçün əsas yanaşmalar

Birkaç səhifəni dolaşmaq üçün əsas yanaşmalar

Python SELF AZ
Səviyyə , Dərs
Mövcuddur

1. «Sonrakı» düyməsindən istifadə

Əgər saytda növbəti səhifəyə keçmək üçün «Sonrakı» düyməsi və ya linki varsa, həmin düyməni tıklamaq üçün bir dövr yaratmaq olar və düymə mövcud olduğu müddətdə ona klikləmək olar.

Kod nümunəsi

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):
    # Hazırkı səhifədən məlumatların toplanması nümunəsi
    items = driver.find_elements(By.CLASS_NAME, "item_class")
    for item in items:
        print(item.text)  # Burada məlumatları yadda saxlamaq və ya emal etmək olar
    
def click_next_button(driver):
    try:
        next_button = driver.find_element(By.LINK_TEXT, "Next")
        next_button.click()
        return True
    except NoSuchElementException:
        return False  # Düymə tapılmadı, deməli sonuncu səhifədəyik

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  # "Next" düyməsi yoxdursa dövrdən çıxır
            time.sleep(2)  # Növbəti səhifənin yüklənməsi üçün gecikmə
    finally:
        driver.quit()

main()

Kodun izahı

initialize_driver() — driver-in başlanğıcı.
open_page() — işləməyə başlamaq üçün ilk səhifənin açılması.
collect_data() — hazırkı səhifədən məlumatların toplanması üçün funksiya.
click_next_button()«Next» düyməsini tapan və klikləyən funksiya. Əgər düymə yoxdursa, False qaytarır, bu da keçidin tamamlandığını göstərir.
main() içərisindəki dövr — səhifələrin keçilməsi üçün əsas dövr. «Next» düyməsi daha tapılmadıqda işi tamamlayır.

2. Səhifələmə nömrələrdən istifadə edərək

Bəzi veb-saytlarda səhifələrin nömrələnmiş linkləri olur (məsələn, "1", "2", "3" və s.). Belə hallarda linklərin siyahısını toplayıb, ardıcıl olaraq hər birinə keçid etmək olar.

Kod nümunəsi

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  # Ümumi səhifə sayını qeyd edin, əgər məlumdursa
        for page in range(1, total_pages + 1):
            collect_data(driver)
            if page < total_pages:  # Son səhifədən sonra növbəti səhifəyə keçmirik
                go_to_page(driver, page + 1)
                time.sleep(2)  # Növbəti səhifənin yüklənməsi üçün gözləmə
    finally:
        driver.quit()

main()

Kodun izahı

go_to_page() — Bu funksiya səhifənin nömrəsinə görə uyğun linki tapır və həmin səhifəyə keçid edir.
main() daxilində dövrtotal_pages dəyişənindən səhifələrin sayını təyin etmək üçün istifadə edir. Dövr son səhifəyə çatana qədər növbəti səhifəyə keçir.

3. Hər səhifə üçün URL-in dəyişdirilməsi

Bəzi saytlar elə bir sadə URL struktura malikdir ki, hər səhifə URL-dəki nömrə ilə müəyyən edilir, məsələn, https://example.com/page/1, https://example.com/page/2 və s. Bu halda sadəcə URL-i dəyişərək lazım olan səhifəni yükləyə bilərsiniz, elementlər axtarmaq zərurətindən qaçaraq.

Kod nümunəsi

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  # Ümumi səhifə sayını qeyd edin, əgər bilirsinizsə
        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)  # Növbəti səhifənin yüklənməsi üçün gecikmə
    finally:
        driver.quit()

main()

Kodun izahı

base_url dəyişəni səhifənin əsas URL-ni saxlayır. Dövr əsas URL-yə səhifə nömrəsini əlavə edir və ardıcıllıqla hər səhifəni açır.
Dövr hər səhifənin URL-ni generasiya edir və məlumat toplama əməliyyatını elementlərə tıklamadan yerinə yetirir. Bu, səhvlərin meydana gəlmə ehtimalını minimuma endirir.

4. Optimizasiya üzrə məsləhətlər

  • Dinamik elementlər üzrə klikləri və gözləmələri minimallaşdırın: Linklərdən və URL-dən istifadə, JavaScript ilə yüklənən düymələrə kliklərdən daha sabitdir.
  • Minimum gecikmə ilə gözləmə taymerlərindən istifadə edin: Yeni səhifəyə keçərkən time.sleep(2) kimi qısa bir gecikmə istifadə edin ki, elementlər yüklənsin, amma lazım olmayan qədər çox gözləməyin.
  • Səhifənin tam yüklənməsindən sonra məlumatları toplayın: Məlumat toplamağa başlamazdan əvvəl səhifədəki məlumatların tam yükləndiyinə əmin olun. Elementləri daha etibarlı şəkildə tapmaq üçün implicitly_wait istifadə edin.
  • Loglama: Cari səhifəni, xətaları və uğurlu keçidləri qeyd etmək üçün loglama tətbiq edin. Bu, skriptin icrası zamanı diaqnostikanı asanlaşdıracaq.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION