CodeGym /Kurslar /Python SELF AZ /JavaScript-məzmunla iş

JavaScript-məzmunla iş

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

1. Dinamik səhifələrə giriş

Əgər heç vaxt JavaScript sayəsində məzmunu yolda yeniləyən saytlarla məlumat toplamağa çalışmısınızsa, bunun əsl baş ağrısı ola biləcəyini bilirsiniz. Amma qorxmayın! Dedikləri kimi, istənilən mürəkkəb kodu elə qurmaq olar ki, o sehr kimi görünsün. Gəlin başa düşək, requests_html belə məzmunla işləməyə necə imkan verir.

Bildiyiniz kimi, bütün veb-səhifələr eyni dərəcədə faydalı deyil. Bəzi səhifələr məzmunu dərhal yükləyir, digərləri isə onu JavaScript vasitəsilə dinamik olaraq yarada və ya yeniləyə bilər. Bu, məlumat çıxarmağa çalışanlar üçün bəzi çətinliklər yaradır, çünki inkişaf etdirici alətləri ilə gördüyünüz HTML, standart sorğu ilə aldığınız HTML-dən fərqli ola bilər.

Dinamik məzmunun skreyplənməsi zamanı yaranan problemlər

Veb ilə işləyən əksər kitabxanalar, məsələn, requests, yalnız server cavabları ilə işləyir və JavaScript-i icra edə bilmir. Bu o deməkdir ki, məzmun JavaScript vasitəsilə yüklənir və ya dəyişdirilirsə, standart sorğu ilə ümumiyyətlə onu görə bilməzsiniz.

2. requests_html kitabxanasından istifadə

Və burda səhnəyə requests_html çıxır — requests-in sadəliyini və JavaScript yerinə yetirən brauzerin gücünü birləşdirən kitabxana. Bu sizə dinamik veb-səhifələrlə elə bir şəkildə qarşılıqlı əlaqə yaratmağa imkan verən əsas renderləmə mühərriki təqdim edir ki, sanki həqiqi brauzer istifadə edirsiniz.

Kitabxananın quraşdırılması və sazlanması

İşə başlamaq üçün gəlin requests_html-i quraşdıraq. Sevdiyiniz terminalı açın və aşağıdakı əmri yerinə yetirin:

Bash
pip install requests-html

Əla, kitabxana quraşdırıldı! İndi ondan istifadə edə bilərik.

JavaScript kontentini əldə etmək üçün requests_html-in əsasları

requests_html işimizi asanlaşdırır. Gəlin onu praktikada necə işlədiyini görə. Təsəvvür edək ki, bizdə məlumatları JavaScript vasitəsilə yaradan bir səhifə var.

Python

from requests_html import HTMLSession

# HTML sessiyası yaradırıq
session = HTMLSession()

# Veb-səhifəyə sorğu göndəririk
response = session.get('https://example-dynamic-page.com')

# JavaScript-i renderləyirik
response.html.render()

# Məlumatları əldə edirik
data = response.html.find('#dynamic-content', first=True)
print(data.text)

Bu bir möcüzədir! requests-dən fərqli olaraq, requests_html bizə .render() metodunu təqdim edir, bu metod səhifəni "hərəkətə gətirir" və JavaScript-i icra edir. Səhifə "canlandıqdan" sonra, daha əvvəl öyrəndiyimiz selektorları istifadə edərək lazım olan bütün məlumatları əldə edə bilərsiniz.

3. Məlumat çıxarma nümunələri

İndi gəlin bir az dərinliyə enək və bir neçə nümunəyə baxaq ki, requests_html bizi müxtəlif ssenarilərdə necə xilas etdiyini görə biləsiz.

Dinamik səhifələrdən məlumat çıxarma təcrübəsi

Təsəvvür edin ki, səhifə son xəbərləri yalnız skroll edəndən sonra yükləyir. requests_html ilə biz istifadəçi davranışını imitasiya edə bilərik.

Python

url = 'https://example-news-site.com'

# Səhifəni yükləyirik
response = session.get(url)

# Lazım olsa, vaxt aşımı müddətini artıraraq render edirik
response.html.render(timeout=20)

# Xəbərləri olan elementləri tapırıq
news_items = response.html.find('.news-item')

for item in news_items:
print(item.text)

Görəsən, nə qədər asan və rahat şəkildə əvvəllər əlçatmaz görünən məzmuna daxil olduq!

JavaScript ilə yüklənmiş məzmunu requests_html vasitəsilə emal etmək

requests_html və əvvəlki mühazirələrdə keçdiyimiz CSS-selectorları ilə veb-səhifələrin məzmunu ilə elə işləyə bilərsiniz ki, sanki illərdir scraping edirsiniz!

Python

# İlk xəbər başlığını seçirik
headline = response.html.find('.news-headline', first=True)
print(headline.text)

# Elementdən linki çıxarırıq
link = headline.find('a', first=True).attrs['href']
print(link)

4. Praktiki məsləhətlər və hiylələr

requests_html güclü bir alətdir, amma onunla işləyərkən bir neçə şeyi unutmaq olmaz:

  • Timeout-lar və gecikmələr: Daha mürəkkəb səhifələr üçün render timeout-larını konfiqurasiya etməyi unutmayın. Bu, yavaş yüklənmələrdən qaynaqlanan səhvlərin qarşısını almağa kömək edər.
  • Render gücü: requests_html çox resurs istifadə edə bilər, çünki JavaScript-i render edir. Böyük həcmli məlumatlar və ya mürəkkəb səhifələr üçün bu prosesin yavaşlamasına səbəb ola bilər.
  • CAPTCHA və botlardan qorunma: requests_html anti-bot qorumasını və CAPTCHA-ları keçmir, bu səbəbdən daha mürəkkəb hallar üçün Selenium kimi vasitələrdən istifadə etmək daha yaxşıdır.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION