1. Cədvəl məlumatlarının çıxarılması
Cədvəllər və soğan arasında nə ortaqdır? Bəli, təbəqələr!
HTML-dəki cədvəllər təbəqəli piroqu xatırladır, hansı ki <table>
, <tr>
(sətirlər), <th>
(başlıq hüceyrələri) və <td>
(adi hüceyrələr) elementlərindən ibarətdir. Hər biri bu elementlərdə məlumatların təqdim edilməsində öz rolunu oynayır. Məlumatları çıxarmaq üçün hər təbəqəni ardıcıl şəkildə əldə etməliyik.
Təcrübə, təcrübə və yenə də təcrübə!
Gəlin aşağıdakı sadə HTML cədvəli ilə başlayaq:
<table>
<tr>
<th>Ad</th>
<th>Yaş</th>
<th>Şəhər</th>
</tr>
<tr>
<td>Alisa</td>
<td>29</td>
<td>Moskva</td>
</tr>
<tr>
<td>Bob</td>
<td>34</td>
<td>Sankt-Peterburq</td>
</tr>
</table>
Adım 1: Səhifədə cədvəlin tapılması
Veb səhifələrdə cədvəllər HTML <table>
teqləri ilə müəyyən olunur, və cədvəldəki məlumatlar <tr>
(cədvəl sətirləri) və <td>
(məlumat hüceyrələri) teqlər daxilində yerləşir. BeautifulSoup
-da find
metodu səhifədə ilk cədvəli tapmağa kömək edir, find_all
isə birdən çox cədvəlin olduğu hallarda onların hamısını əldə etməyə imkan verir.
# Səhifədə ilk cədvəli tapmaq
table = soup.find("table")
Əgər konkret bir cədvəli çıxarmaq lazımdırsa, axtarışı dəqiqləşdirə və cədvəlin atributlarını, məsələn, id
və ya class
, göstərə bilərik.
# Cədvəli class atributuna görə tapmaq
table = soup.find("table", {"class": "table-class"})
Adım 2: Cədvəldən məlumat çıxarılması
Cədvəl yükləndikdən sonra məlumatları çıxarmağa başlaya bilərik. Məlumatlar cədvəldə sətir-sətir yerləşdiyi üçün düzgün addım hər cədvəl sətirindən keçərək hər bir hücrədən məlumatları çıxarmaq olar.
Başlıqların çıxarılması
Cədvəl başlıqları adətən ilk sətrdə yerləşir və <th>
teqlərinə daxil edilir. find_all
istifadə edərək bütün başlıqları siyahıya toplaya bilərik.
# Cədvəl başlıqlarının ilk sətrdən çıxarılması
headers = []
header_row = table.find("tr")
for th in header_row.find_all("th"):
headers.append(th.text.strip())
print("Cədvəl başlıqları:", headers)
Məlumat sətirlərinin çıxarılması
Bütün məlumat sətirlərinin çıxarılması üçün (onlar adətən <tr>
ilə əhatə olunur, və hər hücrə <td>
ilə) iç-içə dövrələrdən (nested loop) istifadə olunur: əvvəlcə bütün <tr>
sətirlərini tapırıq, daha sonra hər sətirin <td>
hücrələrindən keçirik.
# Bütün məlumat sətirlərinin çıxarılması
data = []
rows = table.find_all("tr")[1:] # Başlıqları olan ilk sətri atla
for row in rows:
row_data = []
for cell in row.find_all("td"):
row_data.append(cell.text.strip())
data.append(row_data)
print("Cədvəl məlumatları:", data)
Bu kod səliqəli şəkildə cədvəl sətirlərini keçərək hər hücrədən mətn çıxarır. Möcüzə deyilmi? Əlbəttə ki, biz bilirik ki, heç bir möcüzə dövrələrin magiyasız mümkün deyil!
2. Siyahılarla iş
Siyahılar — cədvəllərin böyük qardaşları
Həyatda sadəcə iki sonsuz obyekt var: cədvəllər və siyahılar. Siyahılar <ul>
(nömrəsiz) və <ol>
(nömrəli) elementləri ilə təqdim olunur, onların elementləri isə <li>
olur. Cədvəllərdən fərqli olaraq, siyahılar sadə və minimalistdir. Bu onları məlumatların sürətli və effektiv emalı üçün mükəmməl namizəd edir!
Siyahılardan məlumatların əldə edilməsi
HTML-siyahısına baxırıq:
<ul>
<li>Alma</li>
<li>Banan</li>
<li>Üzüm</li>
</ul>
İndi bu məlumatları çıxarmaq üçün köhnə dostumuz BeautifulSoup
-dan istifadə edirik:
html = """
<ul>
<li>Alma</li>
<li>Banan</li>
<li>Üzüm</li>
</ul>
"""
soup = BeautifulSoup(html, 'html.parser')
ul = soup.find('ul')
items = ul.find_all('li')
for item in items:
print(item.get_text())
Budur! Sadə, amma effektiv bir yanaşma ki, bunu daha mürəkkəb strukturlara tətbiq edə bilərsiniz.
3. Cədvəl məlumatlarının çıxarılması və işlənməsi nümunəsi
Bilikləri möhkəmləndirmək üçün gəlin məlumatları təcrübədə oxşar bir misaldan çıxarmağa cəhd edək, amma daha mürəkkəb bir struktura malik olsun:
<table id="courses">
<tr>
<th>Kurs</th>
<th>Təlimçi</th>
</tr>
<tr>
<td>Hər kəs üçün Python</td>
<td>Guid van Rossum</td>
</tr>
<tr>
<td>Python ilə avtomatlaşdırma</td>
<td>Erik Mattis</td>
</tr>
</table>
<ul class="technologies">
<li>Python</li>
<li>JavaScript</li>
<li>HTML & CSS</li>
</ul>
Cədvəl və siyahıdan məlumatları çıxarmaq üçün sorğuları bu şəkildə qurmaq olar:
html = """
<table id="courses">
<tr>
<th>Kurs</th>
<th>Təlimçi</th>
</tr>
<tr>
<td>Hər kəs üçün Python</td>
<td>Guid van Rossum</td>
</tr>
<tr>
<td>Python ilə avtomatlaşdırma</td>
<td>Erik Mattis</td>
</tr>
</table>
<ul class="technologies">
<li>Python</li>
<li>JavaScript</li>
<li>HTML & CSS</li>
</ul>
"""
soup = BeautifulSoup(html, 'html.parser')
# Cədvəldən məlumatların çıxarılması
course_table = soup.find('table', id='courses')
course_rows = course_table.find_all('tr')
for row in course_rows:
cells = row.find_all(['th', 'td'])
for cell in cells:
print(cell.get_text())
print("---")
# Siyahıdan məlumatların çıxarılması
tech_list = soup.find('ul', class_='technologies')
tech_items = tech_list.find_all('li')
for item in tech_items:
print(item.get_text())
Bu skript hər iki növ məlumatları əhatə edir. Diqqət edin ki, elementləri dəqiq tapmaq üçün identifikatorlardan və siniflərdən necə istifadə edirik. Praktikada daha kompleks HTML strukturları ilə qarşılaşa bilərsiniz, amma yanaşma eyni qalır: ən üst səviyyədən başlayırıq, elementləri analiz edirik və nəhayət, qiymətli məlumatları çıxarırıq!
4. Qismən yekunlar və yayılmış səhvlər
Veb-səhifələrdə cədvəllər və siyahılarla işləmək labirintdə naviqasiya etmək kimidir. Bəzən biz boş hüceyrələr və ya çatışmayan elementlər kimi tamamlanmamış məlumatlarla qarşılaşa bilərik. Belə hallarda məlumatların düzgün və tam olduğunu yoxlamaq vacibdir. Tez-tez edilən səhvlər daxil olmayan elementlərə giriş etməyə cəhd etmək və ya selectorlardan səhv istifadə etməyi əhatə edə bilər. Yadda saxlamaq lazımdır ki, HTML istədiyimiz qədər təmiz və strukturlaşdırılmış olmaya bilər, buna görə də həmişə istisnaların emalı və məlumatların doğruluğunu yoxlamaq vacibdir.
Bu harada faydalıdır?
Bu mühazirədə əldə etdiyiniz biliklər sizə avtomatik olaraq onlayn mənbələrdən məlumat çıxarmaq və emal etməyə kömək edəcək. Məsələn, siz dəyişmə fondu cədvəllərindən məlumatların toplanmasını avtomatlaşdıra, internet mağazalarda qiymətlərin monitorinqini qura və hətta bloglardan və xəbər saytlarından müntəzəm olaraq məlumatların analizini həyata keçirə bilərsiniz. Cədvəllərdən və siyahılardan məlumat çıxarma texnikasına yiyələnmək sizə avtomatlaşdırma və məlumat analizi üçün geniş imkanlar açır.
GO TO FULL VERSION