CodeGym /Kurslar /Python SELF AZ /Minimum dinamik elementlərdən istifadə edərək bir neçə sə...

Minimum dinamik elementlərdən istifadə edərək bir neçə səhifəni keçmək

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

1. Naviqasiyaya Hazırlıq

Böyük səyahətimizə başlamazdan əvvəl, düzgün alət-kitab ilə silahlanmalıyıq: Selenium və bir az hiyləgərlik. Biz güman edirik ki, artıq Selenium və brauzer üçün driver-i necə quracağınızı bilirsiniz, ona görə də başlayaq!

Driver-in Qurulması

Python

from selenium import webdriver

# Brauzer driver-i işə salırıq, məsələn, Chrome
driver = webdriver.Chrome()

# Macəramızın ilk səhifəsini açırıq
driver.get("http://example.com/start-page")

Hələ ki, hər şey standartdır — biz brauzeri açdıq və başlanğıc səhifəni yüklədik. Amma əyləncə indi başlayır: biz sadəcə bir səhifədə ilişib qalmaq istəmirik. Hər qonşu səhifədə olmaq istəyirik!

2. Səhifələr üzrə naviqasiya: səhifələrə səyahət

Səhifələr üzrə naviqasiyanın ən sadə və rahat üsulu səhifələşdirmədir (pagination). Sən dəfələrlə bu balaca, şirin rəqəmləri səhifənin ən aşağısında görmüsən, deyilmi? Onlar yollardakı nişanlar kimidir: «Sənin növbəti dayanacağın — 2-ci səhifə».

Məlumatların səhifələrdən çıxarılması

Səyahətə başlamazdan əvvəl, cari səhifədən məlumat toplamaq istəyirik. Tutalım ki, bu, məhsulların siyahısı və ya məqalə başlıqlarıdır.

Python

def extract_data():
    # Səhifədə bizi maraqlandıran bütün elementləri tapırıq, məsələn, başlıqları
    titles = driver.find_elements_by_class_name("item-title")
    for title in titles:
        print(title.text)  # Bəli, biz sadəcə mətni çap edirik, amma sən onu harada isə saxlaya bilərsən

extract_data()

Əgər əvvəlki mühazirələrə qatılmamısansa, bu kod parçası item-title sinifində olan bütün başlıqları tapır və onları çap edir.

Sonrakı səhifəyə keçid

İndi məlumatlarla silahlanmış halda irəliləmək vaxtıdır. Səhifələşdirmə adətən növbəti və ya əvvəlki səhifəyə keçid düymələri şəklində təqdim olunur. Biz bu düymələri tapmalı və onlara basmalıyıq.

Python

def go_to_next_page():
    try:
        # Növbəti səhifə düyməsini tapırıq və ona klik edirik
        next_button = driver.find_element_by_link_text("Next")
        next_button.click()
    except NoSuchElementException:
        # Əgər düymə yoxdursa, deməli, sona çatmışıq
        print("Səhifələrin siyahısı bitdi.")

Bu funksiya «Next» mətnli linki axtarır. Əgər onu tapsa, ona klik edərək növbəti səhifəyə keçir. Əgər yoxdursa, bizim bot başa düşür ki, internetin sonuna çatdı... ya da, heç olmasa, bu səhifələr ardıcıllığına.

3. Səhifələri dövr edərək keçmək

Bizə tam xoşbəxtlik üçün nə çatmır? Düzdür, dövr! Gəlin hər şeyi bir rahat dövrə birləşdirək ki, botumuz mövcud olan bütün səhifələri peşəkar kimi dolaşa bilsin.

Python

while True:
    extract_data()  # Cari səhifədən məlumatları toplayırıq
    go_to_next_page()  # Növbəti səhifəyə keçir
    time.sleep(2)  # Serveri qorxutmamaq üçün bir az fasilə veririk

Bax bu qədər, indi botumuz cəsarətlə bütün səhifələri keçir, harada ki, «Next» düyməsinə basmaq olar. Bu kod səhifələr bitənə qədər işləyəcək. Yadda saxlayın ki, sorğular arasında kiçik fasilə — serverlə dostluğunuzdur. Heç kim spam edənləri sevmir, xüsusən də sayt adminləri.

4. Dinamik qarşılıqlı əlaqə

Dostlar, həyat bu səhifələmə nümunələri qədər sadə deyil. Bəzən səhifə scroll etdikcə məlumatları dinamik şəkildə yükləyən "tutulmaz nindza" kimi davranır. Narahat olmayın, bununla da öhdəsindən gələcəyik.

Gözlənti mexanizmi

Gözləntilər kodunuza lazım olan element mövcud olana qədər bir az təmkinli olmağa imkan verir. Bu xüsusilə kontentin dərhal yüklənmədiyi hallarda faydalıdır.

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 tapılmadı.")

Bu funksiya ilə botunuz dinamik yüklənən kontentlə uyğunlaşacaq və elementlər mövcud olana qədər səbir edəcək.

Səhifənin aşağıya scroll edilməsi

Məlumatların dinamik olaraq yükləndiyi, məsələn sonsuz scroll xüsusiyyəti olan səhifələrdə daha çox elementi yükləmək üçün səhifəni aşağıya scroll etmək lazım ola bilər.

Python

def scroll_down():
    # Aşağıya scroll etmək üçün JavaScript-dən istifadə edirik
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    time.sleep(2)

JavaScript skripti səhifənin aşağıya doğru rahat şəkildə scroll edilməsinə kömək edir və bununla səhifənin kontent yükləməsinə imkan yaradır. Bu üsulu loop vasitəsilə sonsuz scroll-u idarə etmək üçün istifadə edə bilərsiniz.

5. Xüsusiyyətlər və lifehack-lər

Məsələlərin hüdudlarından kənara çıxmaq - macəralarla dolu, sürprizlərlə zəngin bir kitabdır. Təsəvvür edin ki, sizin botunuz da sizin kimi müxtəlif ssenarilərə hazır olmalıdır.

Əgər «Next» düyməsi yoxdursa, amma səhifələrin nömrələri ilə olan pagination varsa, URL-ə birbaşa nömrəni yerləşdirərək dinamik yanaşmadan istifadə edin. Əgər saytınız qəflətən ninja olmaq qərarına gəlib bəzi səhifələri gizlədərsə, skriptlərinizi elə qurun ki, onlar uyğunlaşa bilsin və gözlənilməz vəziyyətlərə hazır olsunlar.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION