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()
və 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:
<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:
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
və .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
# 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
# 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
# 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.
GO TO FULL VERSION