CodeGym /Kurslar /Python SELF AZ /«Davam et» linkləri ilə məlumat toplama

«Davam et» linkləri ilə məlumat toplama

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

1. Pagination ilə tanışlıq

Kim deyib ki, lazım olan məlumatlar bir səhifədə olacaq? Çox vaxt onları bir yığın səhifədən çıxarmaq lazım olur, ya da ümumiyyətlə bütün sayt üzrə səpələnmiş olur. Belə ki, qarşılaşacağınız ilk çətinliklərdən biri məlumatların səhifələrə (pages) bölünməsi olacaq. Və onların toplanması ilə əlaqəli bu maraqlı iş pagination (paginasiya) adlanır.

Bəli, paginasiya — bu, yalnız Google nəticələrinin növbəti səhifəsinə keçidi gözlədiyimiz an deyil, həm də web-scraper-in belə bir sual verməsi məqamıdır: "Bunu əl ilə etmədən necə avtomatlaşdırmaq olar?"

Paginasiya — bu, məlumatların sayt üzərində təşkil olunma üsuludur ki, uzun məzmunlu səhifələrdən qaçınılsın. Bunun yerinə, saytlar məlumatları səhifələrə bölür və "Növbəti" və ya "Davamı" kimi keçidlər əlavə edirlər ki, bir səhifədən digərinə keçid mümkün olsun. Bu vacib bir konsepsiyadır, çünki web-scraper olaraq heç bir halda rəhbərinizə nəyisə ala bilmədiyinizi demək istəməyəcəksiniz, çünki o beşinci səhifədə gizlədilib.

2. Bir neçə səhifədən məlumatların skreypinqində problemlər

Qarşılaşa biləcəyiniz ilk problem — intuitiv və proqnozlaşdırıla bilən URL-lərin olmamasıdır. Bəzi saytların URL-ləri səhifələr arasında keçid edərkən kəskin dəyişmir, bu isə avtomatlaşdırma üçün həyatı olduqca çətinləşdirir. Məsələn, page=1, page=2 yerinə x=abc, x=def kimi bir şeylə qarşılaşa bilərsiniz və burada hər hansı bir açıq-aşkar qayda yoxdur.

İkinci problem — botlardan müdafiə. Bəzi saytlar bir IP-ünvandan gələn sorğuların sayını fəal şəkildə izləyirlər. Əgər onlar çox sorğu etdiyinizi görsələr, sizi müvəqqəti (və ya həmişəlik) bloklaya bilərlər.

Amma narahat olmayın, az sonra peşəkar skreyperlər kimi bu çətinliklərin öhdəsindən gəlməyi öyrənəcəyik.

3. Pagination-un keçilməsi

Texnikalar və strategiyalar

  1. URL strukturunun analizi: Adətən səhifələr URL-də səhifə nömrəsini göstərən parametrdən istifadə edir, məsələn ?page=2. Əgər belə bir şey tapmısınızsa, təbriklər, siz pagination keçidi üçün qızıl şablon tapdınız!
  2. "Sonrakı" keçidlərini axtarma: Bəzən URL proqnozlaşdırıla bilmir. Belə hallarda səhifədəki "Sonrakı" və ya "Növbəti" keçidlərini tapmalı və onlara tabe olmalısınız.
  3. AJAX sorğularından istifadə: Bəzi saytlar məlumatları AJAX vasitəsilə səhifəni yeniləmədən alır. Bu halda, həmin sorğuları tutmaq və təkrarlamaq lazımdır.

Gəlin praktika keçək!

Pagination keçidi və məlumat toplanması üçün skript nümunəsi

Gəlin skript nümunəsini nəzərdən keçirək:

Python

import requests
from bs4 import BeautifulSoup

# Bir səhifədən məlumat alma funksiyası
def get_data_from_page(url):
    response = requests.get(url)
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        # Burada soup-dan məlumat çıxarırsınız — nümunə
        data = soup.find_all('div', class_='data-class')
        for item in data:
            print(item.text)  # Məlumatı çap edin və ya saxlayın
    else:
        print(f"Səhifəni almaq mümkün olmadı: {url}")

# Pagination keçidi üçün əsas məntiq
def scrape_all_pages(start_url):
    current_url = start_url
    while current_url:
        get_data_from_page(current_url)
        soup = BeautifulSoup(requests.get(current_url).text, 'html.parser')
        # "Sonrakı" keçidini tapmağa çalışırıq
        next_button = soup.find('a', text='Sonrakı')
        if next_button:
            current_url = next_button['href']
        else:
            current_url = None

# İlk səhifədən scraping-ə başlayırıq
start_url = 'http://example.com/page=1'
scrape_all_pages(start_url)

Bu əsas nümunə pagination ilə işləmə prinsipini göstərir. Onu istifadə etdiyiniz saytın strukturuna uyğunlaşdırmalısınız.

Session idarəsi və user-agent istifadəsi

Sayta çoxlu sorğular göndərdiyiniz zaman, session istifadə etmək və user-agent dəyişmək faydalıdır, bloklanma riskini azaltmaq üçün.

Python

headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, Gecko) Chrome/58.0.3029.110 Safari/537.3'}

session = requests.Session()
session.headers.update(headers)

response = session.get('http://example.com')

Bu konstruksiya brauzeri boş başlıqlar göndərməkdən daha dəqiq emulasiya etməyə imkan verir.

4. Praktiki tətbiq

İndi, əsasları bildikdən sonra, gəlin bir az çətinləşdirək məsələləri. Səhifə keçidlərinin gözlənilməz parametrlər saxladığı bir halı nəzərdən keçirək və AJAX istifadə edərək məlumatların alınmasına ehtiyacımız var.

AJAX istifadəsi ilə tətbiq

Bəzən məlumatlar əsas səhifədə yüklənmir, əvəzində AJAX vasitəsilə yüklənir. Əgər saytın belə davrandığını müşahidə edirsinizsə, brauzerinizdəki şəbəkə debug alətini istifadə edərək, arxa planda hansı sorğuların göndərildiyini müəyyən edin. Daha sonra bu sorğuları Python ilə təkrarlayın.

Python

# AJAX çağrışına nümunə
ajax_url = 'http://example.com/ajax_endpoint'

params = {
'some_param': 'value',  # sorğu üçün lazım olan parametrlər
'page': 1
}

while True:
response = session.get(ajax_url, params=params)
data = response.json()
if not data['has_more']:
break
# Məlumatların işlənməsi
for item in data['items']:
print(item)
params['page'] += 1  # Növbəti səhifəyə keçid

Bu yanaşma, sorğuların və cavabların detallı təhlilindən sonra məlumatların brauzerdə necə yükləndiyini başa düşdükdə faydalıdır.

Bugünkü mühazirə bizə valehedici və bir qədər çətin səhifələmənin dünyasına səyahət etdirdi. Bu bacarıq sizə heç bir səhifəni qaçırmadan, sayt məlumatlarını etibarlı və effektiv toplamağa imkan verəcək. Axı, həyatda olduğu kimi, web-scrapingdə də metodiklik və istək vacibdir, çünki kim bilir, bəlkə iyirminci səhifədə gizli xəzinələr var!

1
Tapşırıq
Python SELF AZ, səviyyə, dərs
Bağlanıb
BeautifulSoup ilə əsas səhifələmə
BeautifulSoup ilə əsas səhifələmə
2
Tapşırıq
Python SELF AZ, səviyyə, dərs
Bağlanıb
Linkə avtomatik keçid "Sonrakı"
Linkə avtomatik keçid "Sonrakı"
3
Tapşırıq
Python SELF AZ, səviyyə, dərs
Bağlanıb
Dinamik səhifələmə ilə məlumatların toplanması
Dinamik səhifələmə ilə məlumatların toplanması
4
Tapşırıq
Python SELF AZ, səviyyə, dərs
Bağlanıb
AJAX sorğularından istifadə edərək səhifələmə
AJAX sorğularından istifadə edərək səhifələmə
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION