CodeGym /Kurslar /Python SELF AZ /Veb-səhifədə elementləri tapmaq üçün CSS-selektorların is...

Veb-səhifədə elementləri tapmaq üçün CSS-selektorların istifadəsi

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

1. CSS-selektorları xatırlayaq

Dünyamıza xoş gəldin, burada HTML səhifələri öz sirlərini bir barmaq şıqqıltısı ilə deyil, məhz doğru CSS-selektor vasitəsilə açır. Əgər düşünürsənsə ki, CSS-selektorlar sadəcə səhifələrin üslubunu dəyişmək üçündür (yəni ki, saytı məktəb dəftəri kimi yox, daha gözəl etmək üçün), o zaman skreypinq üzrə üçüncü gözünü açmaq vaxtıdır. Bu günlərdə CSS-selektorların məlumat tapmaq və çıxarmaq üçün necə sevdiyin vasitəyə çevrilə biləcəyinə baxacağıq.

CSS-selektorlar, sanki kiçik zərif ifadələr kimi, HTML elementlərinə müraciət etməyimizə kömək edir. Onlar səhifədə hansı elementləri emal etmək istədiyinizi təyin etməyə imkan verir. HTML səhifəsi bir labirintdirsə, CSS-selektorlar çıxışı tapmağa imkan verən qırmızı ipdir.

CSS-selektor nümunələri

  • Tag: p — bütün <p> (paraqraflar) elementlərini seçir.
  • Sinif: .classname — təyin olunmuş sinfi olan bütün elementləri seçir.
  • ID: #idname — müəyyən bir ID ilə olan elementi seçir.
  • Kombinasiyalar: div > p<div> elementinin bilavasitə övladları olan bütün <p> elementlərini seçir.

2. BeautifulSoup-da selektorların istifadəsi

CSS-selektorlar olmadan BeautifulSoup-da darıxdırıcı həyata əlvida! Metodumuzu yeniləməyin vaxtıdır. Təsəvvür et ki, bir sayta rast gəldin və ordan bütün böyük müdriklərin sitatlarını çıxarmalısan ki, iş müsahibəsində təsir yaradasan. Bunun üçün biz select() metodundan istifadə edirik, hansı ki CSS-selektorları ilə işləyir.

select()select_one() metodu

select() metodu sənə selektoruna uyğun gələn bütün elementlərin siyahısını qaytarır. select_one() isə sənin üçün ilk uyğun elementi tapacaq — sanki axtarış sistemi, lazım olanı tapıb uzun-uzadı mənasız resurslar siyahısını yox.

Deyək ki sənin bir HTML səhifən var və orada sitatlar mövcuddur:

HTML

<div class="quote">
    <h2 class="author">Puçkin</h2>
    <p class="text">Ay da Puçkin.</p>
    <a href="https://example.com" class="link">Oxumağa davam et</a>
</div>
<div class="quote">
    <h2 class="author">Lenin</h2>
    <p class="text">Oxumaq, oxumaq və yenə oxumaq.</p>
    <a href="https://example.com" class="link">Oxumağa davam et</a>
</div>
<div class="quote">
    <h2 class="author">Stalin</h2>
    <p class="text">İnsan var — problem var, insan yox — problem də yox.</p>
    <a href="https://example.com" class="link">Oxumağa davam et</a>
</div>

Bunları necə əldə edə bilərik:

Python

from bs4 import BeautifulSoup
import requests

# Səhifənin HTML kodunu əldə edirik
response = requests.get('http://quotes.toscrape.com/')
soup = BeautifulSoup(response.text, 'html.parser')

# CSS-selektorlar vasitəsilə bütün sitatları tapırıq
quotes = soup.select('.quote')

for quote in quotes:
    text = quote.select_one('.text').get_text()
    author = quote.select_one('.author').get_text()
    print(f'Sitat: {text}\\nMüəllif: {author}\\n')

Bəyəm bu, çox rahat deyil? .quote klassı bizə sitat kimi işarələnmiş bütün elementləri gətirir, .text.author isə məhz sitat və müəllif mətnini çıxarır.

3. CSS-selektorlarla axtarış nümunələri

Gəlin nümunələr üzərində məşq edək ki, ağıllı beyniniz 10-a yaxın class-a malik bir div görəndə nə edəcəyini bilsin. Selektorlar səhifələrdə daha məqsədli məlumat axtarışı üçün istifadə oluna bilər. Lazım olanı almaq üçün onları birləşdirə bilərsiniz.

Class və tag üzrə selektor

Python

# Menü blokundakı bütün linklərin axtarışı
menu_links = soup.select('nav.menu a')

for link in menu_links:
    print(link['href'])

ID üzrə selektor

Python

# Səhifənin əsas başlığının çıxarılması
main_heading = soup.select_one('#main-heading')
print(main_heading.text)

Selektorların birləşdirilməsi

Python

# Seçilmiş bölmədəki bütün cümlələrin axtarışı
highlighted_sentences = soup.select('.highlighted p')

for sentence in highlighted_sentences:
    print(sentence.text)

4. Səhvlər və onların qarşısını alma yolları

Scraper olaraq işiniz həmişə asan olmayacaq, məsələn, bir fincan kofe qədər sadə. Elə hallar olur ki, CSS-selektorlar işə yaramayır əgər:

  • Səhifədə dəyişkən dinamik kontent olur və lazım olan elementlər JavaScript vasitəsilə yüklənir.
  • Siz mövcud olmayan selektora müraciət edirsiniz (məsələn, sinif və ya ID yazılışında səhv var).
  • HTML-struktur dəyişir, və bu qorxu filmlərindəki səhnələri xatırladır, harda ki siz lazımi elementləri axtarırsınız.

Belə səhvlərdən yayınmaq üçün əmin olun ki, siz aktual və statik HTML-sənədlə işləyirsiniz, həmçinin selektorların yazılış dəqiqliyini diqqətlə izləyirsiniz.

Praktik tətbiq

İndi sizin CSS-selektorları məlumat çıxarmaq üçün real layihələrdə istifadə etmək imkanınız var. Bu bacarıq qiymətlərin təhlili və monitorinqi üçün alətlər yaradarkən, xəbərlərin alınmasında və hətta sayt dəyişikliklərini izləməkdə yararlıdır. Bu yanaşmanın gözəlliyi ondadır ki, hətta əgər sayt CSS sayəsində xarici görünüşünü dəyişsə belə, kodunuz işlək qalır, çünki o, HTML-strukturuna əsaslanır, stilizasiyaya yox.

1
Опрос
BeautifulSoup ilə tanışlıq,  31 уровень,  4 лекция
недоступен
BeautifulSoup ilə tanışlıq
BeautifulSoup ilə tanışlıq
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION