Gözəl Çorba istifadə edərək Python Veb Sıyırma

İnternet hər hansı bir tədqiqat sahəsi və ya şəxsi maraq üçün böyük bir məlumat mənbəyidir. Gözəl Çorba istifadə edərək Python Veb Sıyırma internetdən məlumat toplamaq üçün istifadə olunur. Python kitabxanalarının istəkləri və Gözəl Çorba veb qırmaq üçün istifadə olunan güclü vasitədir. Əsaslarını bilirsinizsə Python və HTML, sonra bu təlimatı davam etdirə bilərsiniz. Bu təlimatda veb qırma haqqında daha çox məlumat əldə etməyə kömək edəcək bəzi praktik nümunələri həll edə bilərik.

Bu dərslikdən nə öyrənəcəksiniz?

  • Python kitabxanaları istəkləri və Gözəl Şorba istifadə edərək vebdən məlumatları necə qırmaq və təhlil etmək.
  • İnternetin boru kəməri ilə əlaqəli fikir.
  • Təcrübəli bir nümunə olaraq, iş təkliflərini veb səhifədən almaq və konsolda yalnız müvafiq məlumatları çap etmək üçün Python'da bir kod yazacağıq.

Eyni texnika və eyni vasitələrdən istifadə edərək, dünya miqyasında şəbəkədə mövcud olan hər hansı bir statik veb saytdan məlumat əldə edə bilərsiniz.

Niyə veb qırxmağa ehtiyacımız var?

İnternet hər hansı bir tədqiqat sahəsi və ya şəxsi maraqlarınız üçün böyük bir məlumat mənbəyidir. İşimizi asanlaşdırmaq üçün məlumatları internetdən toplamaq üçün veb cızmağa ehtiyacımız var. Veb kazıma xüsusən internetdən çox miqdarda məlumat çıxarmaq lazım olduqda faydalıdır. Çıxarılan məlumatlar ya yerli kompüterinizdə, ya da bir verilənlər bazasında saxlanıla bilər.

Bəzi veb saytlar veb brauzerdə göstərilən məlumatların bir nüsxəsini şəxsi istifadə üçün saxlamağımıza icazə verməyəcəkdir. Bu vəziyyətdə, məlumatları əl ilə kopyalayıb yapışdırmalıyıq - kopyalamaq üçün böyük bir məlumatınız olduğu təqdirdə saatlarla çəkə bilən çətin bir iş. İşi əl ilə yerinə yetirmək əvəzinə veb sürtmə ilə bu prosesi avtomatlaşdıracağıq.

Veb kazıma üçün istifadə edilən güclü vasitələr, Python kitabxanaları istəkləri və Gözəl Şorba. Bu dərsdə, Gözəl Çorba istifadə edərək Python Veb Sıyırma haqqında məlumat əldə edəcəyik.

Gözəl Çorba istifadə edərək Python Veb Sıyırma

İnternetdən çox miqdarda məlumat çıxarmaq lazım olduqda veb cızma faydalıdır. Çıxarılan məlumatlar ya yerli kompüterinizdə, ya da bir verilənlər bazasında saxlanıla bilər.

Bəzi veb saytlar veb brauzerdə göstərilən məlumatların bir nüsxəsini şəxsi istifadə üçün saxlamağımıza icazə verməyəcəkdir. Bu vəziyyətdə, məlumatları əl ilə kopyalayıb yapışdırmalıyıq - kopyalamaq üçün böyük bir məlumatınız olduğu təqdirdə saatlarla çəkə bilən çətin bir iş. Verilənləri veb saytlardan əl ilə kopyalamaq əvəzinə, veb sürtmə köməyi ilə bu prosesi avtomatlaşdıra bilərik. Veb kazıma proqramı, eyni tapşırığı bizim üçün daha az vaxtla yerinə yetirəcəkdir.

Bununla birlikdə, bəzi veb saytlar avtomatlaşdırılmış kazıyıcıların məlumatlarını qırmasına icazə verməz, bəziləri isə əhəmiyyət vermir. Veb saytından məlumatları silmədən əvvəl hər hansı bir Xidmət Şərtini pozmadığınızdan əmin olun. Zəhmət olmasa yoxlayın Müasir İnternetdən məlumatların qırılmasına dair hüquqi perspektivlər veb qırxmanın hüquqi aspektləri haqqında daha çox məlumat verən,

Niyə məlumatları qırmağa ehtiyac var?

Xüsusi bir məhsul axtarırsınızsa deyək Amazon. Sadəcə heç bir qiymətə almaq istəmirsiniz. Qiymətdə müəyyən endirim olanda almaq istəyirsən. Amazon bu məhsulla bağlı təkliflərini zaman -zaman elan edir. Hər gün yoxlamağa davam edirsiniz, amma bu, vaxtınızı səmərəli keçirməyin yolu deyil.

Tez-tez yeni məzmunla yenilənən veb saytlardan böyük məlumatlar çıxarmaq lazım olduqda axtarışa, sürüşməyə və tıklamağa çox vaxt sərf edirsiniz. Əllə veb qırmaq təkrarlanan bir işdir və bunun üçün çox vaxt sərf edirsiniz.

Budur Python sizin köməyinizə gəlir. Hər gün məhsulun qiymətini yoxlamaq əvəzinə, bu təkrarlanan prosesi avtomatlaşdırmaq üçün Python skriptini yaza bilərsiniz. Məlumat toplama prosesini sürətləndirmək üçün həll Avtomatik veb cızmaqdır. Python skriptinizi yalnız bir dəfə yazacaqsınız, yoxsa ssenari sizə lazım olan məlumatları istədiyiniz qədər və istədiyiniz səhifədən gətirəcəkdir.

İnternet dünyasında hər saniyədə bir çox yeni məzmun yüklənir. Şəxsi istifadə üçün iş axtarışı üçün olsun, bu məlumatları toplaya bilərsiniz, avtomatlaşdırılmış veb qırxma hədəfinizə çatmanıza kömək edəcəkdir.

Nə çətinliklər var?

Hər veb sayt fərqlidir, çünki hər gün ortaya çıxan bir çox yeni texnologiya var və veb sayt böyüməyə davam edir. Bu, bir veb saytı qırmağa çalışarkən qarşılaşacağınız çətinliklər yaradır.

Estrada

Hər veb sayt özünəməxsusdur. Beləliklə, tək bir ssenari yazmaq və bütün veb saytlar üçün bunu gözləmək olmaz. Müvafiq məlumatları bir veb saytdan necə çıxarmaq barədə çalışmalısınız.

Davamlılıq

Bir veb saytdan sizin üçün müvafiq məlumatları əldə edən bir skriptiniz var. Ancaq veb sayt sabit qalmaq niyyətində deyil. Veb sayt trendə görə indi və sonra dəyişir. Veb sayt dəyişdikdən sonra skriptiniz düzgün işləməyə bilər və bir çox səhv salır.

Bu real vaxt ssenarisidir, çünki çevik sayəsində veb saytların çoxu bu günlərdə aktiv inkişafdadır. Veb sayt dəyişdikdən sonra, skriptiniz sizə gözlənilən nəticəni verməyə bilər. Ancaq veb saytlardakı dəyişikliklərin əksəriyyəti kiçik və artımlı olduğundan yaxşı bir şey olduğu üçün skriptinizi minimuma endirə bilərsiniz.

Bütün bunları nəzərə alaraq, ssenarinizin davamlı baxımına ehtiyac var. Davamlı bir inteqrasiya quraraq, skriptinizin düzgün işlədiyinə və məlumatınız olmadan pozulmadığına əmin ola bilərsiniz.

Python Web Scraping API

API veb cızma üçün əvəzedicidir. API-nin kısaltması Alternativ Proqramlaşdırma İnterfeysidir. Bəzi veb sayt təminatçıları əvvəlcədən təyin olunmuş şəkildə məlumatlarına daxil olmaq üçün API təklif edirlər. API ilə, HTML-i təhlil etmədən birbaşa XML və JSON istifadə edərək məlumat əldə edə bilərsiniz.

HTML veb məzmununun quruluşunu müəyyənləşdirir. Veb saytın HTML-si dəyişdikdə, API avtomatik skript skriptindən fərqli olaraq sabit qalır. Beləliklə, API'lər internetdən məlumat toplamaqda veb cızmaqdan daha səmərəlidir.

Bununla birlikdə, veb qırxmanın problemləri API-lərə də aiddir. Təqdim olunan sənədlərdə keyfiyyət çatışmırsa, API-nin strukturunu yoxlamaq çətindir.

API'lər bu təlimatın bir hissəsi deyil. Veb qırxmağa davam edək.

İş saytının qaşınması (Python Web Scraping Demo)

Bu dərslikdə biz Qulyabanı bir proqram geliştiricisinin iş siyahısını almaq üçün iş saytı. İnkişaf etdirəcəyimiz Veb kazıyıcı HTML məzmununu təhlil edəcək və xüsusi sözlər üçün məzmunu süzərək müvafiq məlumat əldə edəcəkdir.

Hər hansı bir veb saytı qırxa bilərsiniz, ancaq bunu etmək çətinliyi veb saytdan fərqlidir. Bu təlimatda ümumi prosesi başa düşəcəksiniz. Bu məlumatdan digər veb saytları qırxa bilərsiniz.

Hissə 1: Məlumat mənbəyini araşdırın

Silmək istədiyiniz veb səhifəni sevdiyiniz brauzerinizdə açaraq qırmağa başlaya bilərik. Məlumat çıxarmaq üçün iş saytının quruluşunu başa düşməlisiniz.

Veb saytı araşdırın

Canavar veb saytına gedin və canavar veb saytının yerli axtarışından istifadə edərək Dublində proqram inkişaf etdirici işlərini axtarın.

Gözəl Çorba istifadə edərək Python Veb SıyırmaPin

Axtarış nəticəsində bir çox iş siyahısı verildi. Sol tərəfdə işlərin siyahısını görə bilərsiniz. Müəyyən bir işi tıkladığınızda, sağ tərəfdə bu işin daha ətraflı təsvirini görə bilərsiniz. Xüsusi bir iş bildirişini tıkladığınızda brauzerinizin ünvan çubuğundakı URL-nin də dəyişdiyini bildirir.

Gözəl Çorba istifadə edərək Python Veb SıyırmaPin

URL-də kodlanmış məlumatları anlayın

URL bir çox kodlanmış məlumat ehtiva edir. URL-lərin necə işlədiyini və hansı məlumatları ehtiva etdiyini bilsəniz, veb cızma ilə işləmək çox asan olacaq. Bu təlimat üçün istifadə etdiyimiz veb saytın URL-si:

https://www.monster.com/jobs/search/?q=Software-Developer&where=Dublin

URL-ni iki əsas hissəyə bölə bilərik:

Əsas URL

Veb saytın axtarış funksiyasına gedən yol əsas URL-ni təmsil edir. Nümunəmizdəki əsas URL "https://www.monster.com/jobs/search/"

Sorğu parametrləri

Veb saytda elan edilmiş əlavə dəyərlər sorğu parametrlərini əks etdirir. Nümunəmizdəki sorğu parametrləri “? Q = Software-Developer & where = Dublin” dir. Hər şeyin '?' - dən sonra mövcud olduğunu da deyə bilərik. URL-də sorğu parametrləri göstərilir.

Əsas URL-nin eyni qaldığını görə bilərsiniz. Sorğu parametrləri axtarış meyarlarına əsasən dəyişir. Sorğu parametrlərinin istifadəsi verilənlər bazasında xüsusi qeydləri gətirmək üçün istifadə olunan sorğu sətirlərinə bənzəyir.

Sorğu parametri ümumiyyətlə bu 3 şeydən ibarətdir:

start

Sual işarəsi '?' sorğu parametrinin başlanğıcını göstərir.

məlumat

Sorğu parametri əsas dəyər cütlərində kodlanmış məlumatları ehtiva edir. Bərabər işarəsi müvafiq düyməni və dəyərləri birləşdirir (açar = dəyər).

separator

URL birdən çox sorğu parametrindən ibarət ola bilər. Ampersand (&) işarəsi hər bir sorğu parametrini ayırır.

Yuxarıdakı məlumatlara əsasən URL-lərimizi araşdırın. URL-də iki əsas dəyər cütü var:

  • q = Axtardığımız iş növünü təyin edən Software-Developer.
  • harada = axtardığımız yeri təmsil edən Dublin.

Axtarış meyarlarını dəyişdirsəniz, sorğu parametrləri müvafiq olaraq dəyişdiriləcəkdir. Aşağıdakı kimi axtarış meyarlarını dəyişdirərək test edək:

URL olacaq:

https://www.monster.com/jobs/search/?q=Software-Developer&where=India

URL-də sorğu parametrlərini də dəyişə bilərsiniz, axtarış meyarları müvafiq olaraq dəyişdiriləcəkdir. URL dəyişdirin və axtarış çubuğunu yoxlayın.

https://www.monster.com/jobs/search/?q=Software-Developer&where=Australia

Axtarış nəticələri axtarış zolağındakı məlumatları və ya URL-dəki sorğu parametrlərini dəyişdirərək dəyişdirilə bilər. URL-də olan məlumatları anlamaqla veb saytdan məlumat ala bilərsiniz.

Veb saytı yoxlayın

İstədiyiniz məlumatları əldə etmək üçün bir veb səhifənin quruluşunu anlamalısınız. HTML veb səhifənin göstərilmək üçün necə qurulduğundan cavabdehdir. Developer Tools istifadə edərək bir veb səhifənin HMTL cavabını alacaqsınız.

Bütün müasir veb brauzerlərdə güclü bir geliştirici vasitəsi dəsti də var. Bu vasitələrlə, hazırda yüklənmiş HTML, CSS və JavaScript-i yoxlamaqdan, səhifənin hansı aktivləri tələb etdiyini və nə qədər yüklədiklərini göstərməyə qədər çox şey edirik.

Bu təlimdə Chrome brauzerinin inkişaf etdirici alətləri ilə necə işləyəcəyimizi görəcəyik. Chrome brauzerində geliştirici alətlərini açmağın 2 yolu var.

  • Seçimlərdən biri menyu çubuğundadır, View-> Developer-> Developer tools.
  • Başqa bir seçim veb səhifəni sağ vurmaq və Təftiş etməkdir.

Geliştirici alətləri vasitəsilə veb səhifənin DOM-u ilə əlaqə qura bilərsiniz. DOM, proqramlara və skriptlərə sənədin məzmununa, quruluşuna və üslubuna dinamik olaraq daxil olmağa və yeniləməyə imkan verən bir cross-platform və dildən asılı olmayan bir interfeysdir. Geliştirici alətlərindəki Elements nişanını seçməklə veb səhifənin DOM-unu qazmağa başlaya bilərsiniz. Brauzerdəki elementləri düzəldə, genişləndirə və yıxa bilərsiniz.

Gözəl Çorba istifadə edərək Python Veb SıyırmaPin

Gördüyünüz şey veb səhifənin HTML quruluşundan başqa bir şey deyil. Müəyyən bir işi yoxlamaq istəyirsinizsə, işi sağ basın və yoxlayın. Elementin DOM-da yerləşdiyi yerə aparılacaqsınız. HTML məzmununun üzərinə gedə bilərsiniz və veb səhifədə müvafiq dəyişikliklər vurğulanacaq.

Veb səhifənin quruluşunu daha yaxşı bir şəkildə başa düşsəniz, məlumatları silmək daha asan olacaq. Əgər bundan narahat olursunuzsa, narahat olmayın ki, Gözəl Şorba ilə yalnız maraqlı hissələri çıxaracağıq.

Hissə 2: Veb səhifəsini HTML məzmunu üçün silmək

Nə işlədiyimiz barədə əsas bir fikriniz olduğundan, gəlin piton hissəsinə keçək. İlk addım olaraq veb saytın HTML kodunu Python skriptimizə daxil etməliyik. Bu tapşırıq üçün Python'un istəklər kitabxanasına ehtiyacımız var. Aşağıdakı əmri terminalınıza yazaraq istəklər quraşdıraq.

pip install requests

Mətn redaktorunuza gedin və yeni bir python faylı açın. Aşağıda Python istifadə edərək bir veb səhifənin HTML kodunu almaq üçün kod verilmişdir.

import requests

URL='https://www.monster.com/jobs/search/?q=Software-Developer&where=Dublin'
page=requests.get(URL)

Silmək istədiyimiz veb səhifənin URL ünvanı URL dəyişəninə verilir. Yuxarıda göstərilən kodda URL üçün bir HTTP sorğusu edirik. Bir serverdən bir cavab alırıq və bir səhifə deyilən dəyişənə saxlayırıq. Məzmun atributunu çap edərək əldə etdiyimiz HTML məlumatlarını görə bilərsiniz.

print(page.content)

Çıxış, geliştirici alətlərinin elementlər nişanında gördüyümüz HTML məzmundan başqa bir şey deyil. HTML kodunun konsolda necə göründüyünün quruluşunu yaxşılaşdırmaq istəyirsinizsə, çap əvəzinə pprint istifadə edin. Pprint haqqında daha çox məlumat əldə etmək istəyirsinizsə, rəsmi Python sənədlərinə baxın.

import requests
import pprint

URL='https://www.monster.com/jobs/search/?q=Software-Developer&where=Dublin'
page=requests.get(URL)
pp = pprint.PrettyPrinter()
pp.pprint(page.content)

Statik veb saytlar

Bu təlimat üçün statik bir veb səhifəni qırırıq. Server bir istifadəçinin görə biləcəyi bütün HTML məzmunlarını geri göndərir.

Aşağıda müəyyən bir iş elanının HTML kodu verilmişdir. Kod uzun və qarışıq görünür.

<section class="card-content is-active" data-jobid="217939354" data-postingid="318203fa-aeaf-4573-b083-229633ddc854" onclick="MKImpressionTrackingMouseDownHijack(this, event)">
    <div class="flex-row">
        <div class="mux-company-logo thumbnail"></div>
        <div class="summary">
            <header class="card-header">
                <h2 class="title">
                    <a
                        data-bypass="true"
                        href="https://job-openings.monster.com/ios-developer-lewis-center-oh-us-klaxon-tech/217939354"
                        onclick='clickJobTitle(&apos;plid=561&amp;pcid=660&amp;poccid=11970&apos;,&apos;Software Developer&apos;,&apos;&apos;); clickJobTitleSiteCat(&apos;{"events.event48":"true","eVar25":"iOS Developer","eVar66":"Monster","eVar67":"JSR2CW","eVar26":"xklaxontechx_Klaxon Tech","eVar31":"Lewis Center_OH_","prop22":"Employee","prop24":"2020-05-21T12:00","eVar53":"1500127001001","eVar50":"Duration","eVar74":"regular"}&apos;)'
                        coretrack='{"olduuid":"8343b2e6-631a-4fb2-a6ec-1ff6397d5516","s_t":"t","j_jobid":"217939354","j_postingid":"318203fa-aeaf-4573-b083-229633ddc854","j_jawsid":"433081025","j_pvc":"monster","j_coc":"xklaxontechx","j_cid":"660","j_occid":"11970","j_lid":"561","j_p":"2","j_lat":"40.1839","j_long":"-82.9843","j_jpt":"1","j_jpm":"1","j_placementid":"JSR2CW","s_search_query":"q%3DSoftware%2520Developer%26brd%3D1%26brd%3D2%26cy%3DUS%26pp%3D25%26sort%3Drv.di.dt%26nosal%3Dtrue%26geo%3DDublin%252c32.18688%252c1277021%252c580642%252c702%252cCity%26stp%3DScoreFenceHash","s_q":"Software%20Developer","s_where":"Dublin","j_pg":"1","a_affiliate_id":"Monster","uinfo":"-1","isloggedin":"False","uuid":"d9509d9a-f023-4273-9792-9666fce07cd3"}'
                        coretrackclickadded="true"
                    >
                        iOS Developer
                    </a>
                </h2>
            </header>
            <div class="company">
                <span class="name">Klaxon Tech</span>

                <ul class="list-inline"></ul>
            </div>
            <div class="location">
                <span class="name">
                    Lewis Center, OH
                </span>
            </div>
        </div>
        <div class="meta flex-col">
            <time datetime="2017-05-26T12:00">4 days ago</time>
            <span data-mux="tooltip" title="" class="mux-tooltip applied-only" mux1590415016860="13" data-original-title="Applied">
                <i class="icon icon-applied" aria-hidden="true"></i>
                <span class="sr-only">Applied</span>
            </span>
            <span data-mux="tooltip" title="" class="mux-tooltip saved-only" mux1590415016860="14" data-original-title="Saved">
                <i class="icon icon-saved" aria-hidden="true"></i>
                <span class="sr-only">Saved</span>
            </span>
        </div>
    </div>
</section>

Bu qədər uzun bir kodu görmək çox çətindir. İstifadə edin HTML formatlayıcı kodu formatlaşdıran və oxumağı asanlaşdıran. Kodun oxunaqlılığı yaxşı olduqda kodun quruluşunu anlamaq daha yaxşı olar. Hər veb saytın fərqli olduğunu unutmayın. Buna görə veb səhifəni yoxlamalı və kod quruluşunu anlamalısınız.

Yuxarıdakı HTML bir çox fərqli elementdən ibarətdir. Məsələn, çox sayda element görə bilərsiniz. Yalnız “sinif” atributuna diqqət yetirəcəyik.

class = “title”: iş elanının adı

class = ”company”: iş elanı təklif edən şirkətin adı

class = ”location”: sizə iş təklif ediləcəyi yer

Python skriptindən istifadə edərək HTML məlumatlarını statik bir veb saytdan necə əldə edəcəyimizi öyrəndik. Yalnız HTML-dən müvafiq məlumatları almaq üçün gözəl şorbaya keçmədən əvvəl digər çətin vəziyyətlərə nəzər salaq.

Gizli veb saytlar

Bəzi veb səhifələrdə səhifəyə daxil olmadığınız müddətdə görə bilmədiyiniz gizli bir məntiq var. Bu veb səhifələr üçün məlumatları qırmaq üçün bir hesaba ehtiyacımız var. Gizli veb saytlara HTTP istəkləri etmək üçün Python skripti statik veb saytlardan fərqlidir. Veb saytına daxil ola biləcəyinizi düşünə bilərsiniz, sonra statik veb saytlar etdiyimiz kimi Python istifadə edərək məlumatları qırırıq, amma bu belə deyil.

İstəklər ilə, girişin arxasındakı məzmunu silmək üçün bəzi inkişaf etmiş üsullardan istifadə etməlisiniz. Bu üsullarla Python skriptindən istifadə edərək bir HTTP sorğusu edərkən veb saytlara daxil ola bilərsiniz.

Dinamik veb saytlar

Statik veb saytlarla işləmək dinamik veb saytlarla müqayisədə daha asandır, çünki statik veb saytlarla işləyərkən server cavab olaraq bütün HTML kodlarını göndərir. Sonra yalnız müvafiq məlumatları almaq üçün gözəl şorbadan istifadə edə bilərik.

Dinamik veb saytlarda belə deyil. Server HTML kodunu ümumiyyətlə göndərməyəcəyi üçün bunun əvəzinə Javascript kodu cavab olaraq göndərir. Bu Javascript kodu, geliştirici alətlərindən istifadə edərək yoxladığımızdan tamamilə fərqli görünür.

Bir çox müasir veb sayt serverdən müştəri maşınlarına qədər işi azaltmaq üçün serverlərindəki nömrələrin sıxılmasından çəkinir. Bunun əvəzinə bir Javascript kodu göndərirlər ki, brauzer HTML kodunu yaratmaq üçün Javascript kodunu yerli olaraq yerinə yetirəcəkdir.

Brauzerin arxa planında nə olursa olsun, skriptdə baş verənlərlə əlaqəli deyil. Bir serverdən alınan Javascript kodundan brauzer DOM və HTML yaradır. Ancaq dinamik veb saytına HTTP tələbi göndərəcək Python skriptimiz HTML kodunu deyil, Javascript kodunu qaytarır.

İstəklər kitabxanasından istifadə edərək aldığımız Javascript kodu gözəl şorba ilə təhlil olunmayacaq. Brauzerin etdiyi kimi Javascript kodundan HMTL məzmunu çıxarmalıyıq. Təəssüf ki, istəklər kitabxanası ilə bunu edə bilmərik, amma başqa seçimlər var.

Müəllif istəklər kitabxanasında Javascript-i istəklərdəki sintaksisə bənzər sintaksisdən istifadə edərək təqdim edən 'Requests-html' adlı bir layihə yaratdı. Gözəl şorba istifadə edərək məlumatları təhlil etmək üçün əsas tətbiqetmə də daxildir.

Selenium, dinamik veb saytları qırmaq üçün başqa bir populyar seçimdir. Selenium, Javascript kodunu yerinə yetirən və göstərilən HTML kodunu bizim üçün ötürən incə aşağı bir brauzer kimi çıxış edir.

Bu təlimatda, dinamik veb saytları necə qırmaq barədə danışmayacağıq. Ancaq dinamik bir veb sayt qırxdığınız zaman bu məqamları xatırlayın.

Bölüm 3: Gözəl Çorba istifadə edərək HTML kodunu təhlil edin

İndi Python skriptini istifadə edərək bir veb səhifədən HTML məzmunu necə əldə etməliyik. Ancaq aldığımız HTML kodu uzun və dağınıq görünür. Çox HTML elementi var və Javascript qarışığı da var. İndi Gözəl çorba istifadə edərək bu dağınıq HTML kodunu təhlil edəcəyik və yalnız müvafiq məlumatları əldə edəcəyik.

Strukturlaşdırılmış məlumatları təhlil etmək üçün Python, Gözəl Çorba adlı kitabxana təmin edir. Gözəl şorba ilə, geliştirici vasitələrindən istifadə edərək veb saytla qarşılıqlı əlaqədə olduğu kimi HTML ilə də qarşılıqlı əlaqə qura bilərsiniz. Gözəl şorba, HTML məlumatlarını təhlil etmək üçün istifadə edə biləcəyiniz bir neçə funksiya təmin edir.

İşə başlamazdan əvvəl terminala aşağıdakı əmri daxil edərək gözəl şorba quraşdırın.

pip install beautifulsoup4

İndi gözəl şorba kitabxanasını python skriptinizə daxil edin və bunun üçün bir obyekt yaradın.

import requests
from bs4 import BeautifulSoup

URL='https://www.monster.com/jobs/search/?q=Software-Developer&where=Dublin'
page=requests.get(URL)
soup=BeautifulSoup(page.content,'html.parser')

Yuxarıdakı kodda gözəl şorba idxal edirik və bunun üçün bir obyekt yaradırıq. Obyekt yaratarkən veb səhifədən cavab olaraq aldığımız HTML məlumatlarını və giriş olaraq uyğun təhlilçini ötürürük.

Id elementlərini tapın

HTML məlumatlarında hər elementə bir id atributu verilir. Ad göstərir ki, hər bir element id atributu ilə unikal şəkildə müəyyən edilir. Müəyyən bir elementi id-i ilə seçərək veb səhifəni necə təhlil edəcəyimizi nəzərdən keçirək.

Brauzerinizi açın və geliştirici vasitələrinə keçin. Bütün iş elanlarını ehtiva edən bir HTML obyekti var, tapın. Geliştirici vasitələrindən istifadə edərək veb saytla qarşılıqlı əlaqə qurmaq üçün vaxtaşırı brauzerə keçmək üçün həmişə yaxşı təcrübədir. Veb səhifənin hissələrinin üzərinə sürüşdürə və axtardığınız elementləri tapmaq üçün yoxlaya bilərsiniz.

Axtarırıq "ResultsContainer" dəyərini ehtiva edən bir id atributu olan element. Id atributundan başqa elementin digər xüsusiyyətləri də var. Aşağıda axtardığımız məlumatların mahiyyəti verilmişdir.

<div id="ResultsContainer">
    <!-- all the job listings -->
</div>

Mövcud skriptinizə aşağıdakı sətir əlavə edərək Pythondakı id istifadə edərək element əldə edə bilərik:

results = soup.find(id='ResultsContainer')

Daha yaxşı formatda çap etmək üçün hər hansı bir gözəl şorba obyektində .prettify () istifadə edə bilərsiniz. Nəticələr dəyişənində .prettify () metodunu çağırın və nəticəni müşahidə edin.

print(results.prettify())

Yuxarıda göstərilən metoda bənzər bir şəkildə, id-dən istifadə edərək HTML-dən hər hansı bir xüsusi element çıxara bilərik. Bununla yuxarıdakı metodu istifadə edərək HTML-nin müəyyən bir hissəsi ilə işləyə bilərik, HTML kodu uzun və qarışıqdır.

Elementləri sinif adı ilə tapın

Adlı bir element var hər bir işin yerləşdirilməsini əhatə edən sinif kartı məzmunu ilə. Yalnız iş elanlarını almaq üçün nəticələr dəyişənini süzək. Bu, həqiqətən axtardığımız məlumatlardır. Kod sadəcə bir sətirdir:

jobs=results.find_all('section',class_='card-content')

Gözəl bir şorba obyektindəki .find_all () metodu təkrarlananı qaytarır. For loop ilə hər iş elementini çap edə bilərik.

for job in jobs:
    print(job, end='\n'*2)

Hər bir iş elementini fərqləndirmək üçün hər bir iş elementi arasında iki sətir yer verdik. İndi hələ də çox səliqəli görünür, yalnız başlığı, şirkətini və yerini alaraq daha da dəqiqləşdirə bilərik.

<h2 class="title"><a data-bypass="true" data-m_impr_a_placement_id="JSR2CW" data-m_impr_j_cid="660" data-m_impr_j_coc="" data-m_impr_j_jawsid="417704839" data-m_impr_j_jobid="0" data-m_impr_j_jpm="1" data-m_impr_j_jpt="2" data-m_impr_j_lat="40.0994" data-m_impr_j_lid="561" data-m_impr_j_long="-83.0166" data-m_impr_j_occid="11970" data-m_impr_j_p="26" data-m_impr_j_postingid="95973ee2-e649-472c-8493-98a2bb9c6cd5" data-m_impr_j_pvc="diceftpin" data-m_impr_s_t="t" data-m_impr_uuid="9176e69f-0346-45a5-b85e-7cd8f6b93597" href="https://job-openings.monster.com/application-developer-columbus-oh-us-atash-enterprises-llc/95973ee2-e649-472c-8493-98a2bb9c6cd5" onclick="clickJobTitle('plid=561&amp;pcid=660&amp;poccid=11970','Software Developer','');clickJobTitleSiteCat('{&quot;events.event48&quot;:&quot;true&quot;,&quot;eVar25&quot;:&quot;Application Developer&quot;,&quot;eVar66&quot;:&quot;Monster&quot;,&quot;eVar67&quot;:&quot;JSR2CW&quot;,&quot;eVar26&quot;:&quot;_Atash Enterprises, LLC&quot;,&quot;eVar31&quot;:&quot;Columbus_OH_&quot;,&quot;prop24&quot;:&quot;2020-05-26T
12:00&quot;,&quot;eVar53&quot;:&quot;1500127001001&quot;,&quot;eVar50&quot;:&quot;PPC&quot;,&quot;eVar74&quot;:&quot;reg
ular&quot;}')">Application Developer
</a></h2>
<div class="company">
<span class="name">Atash Enterprises, LLC</span>
<ul class="list-inline">
</ul>
</div>
<div class="location">
<span class="name">
Columbus, OH
</span>
</div>

Tək bir iş elementi belə görünür. Yenə də bir çox HTML etiketi və atributu var, növbəti mərhələdə bunu daha da daraltacağıq.

Mətn məzmununu HTML elementlərindən süzün

Mətni silməklə, hər bir iş göndərmənin yalnız başlığını, yerini və şirkətini görə bilərsiniz. Gözəl bir şorba obyektinə .text əlavə edərək yalnız HTML elementlərinin mətn tərkibini çıxara bilərik.

for job in jobs:
    title=job.find('h2',class_='title')
    company=job.find('div',class_='company')
    location=job.find('div',class_='location')
    print(title.text)
    print(company.text)
    print(location.text)
    print()

Artıq çıxışda mətnin məzmununa baxa bilərsiniz, lakin bir çox boşluq var. Boşluğu aradan qaldırmaq üçün .strip () istifadə edin. Təmizləmək üçün digər Python simli metodlarından da istifadə edə bilərsiniz.

Yuxarıdakı kodu çalıştırdığınızda bir atribut səhvini alacaqsınız.

AttributeError: 'NoneType' object has no attribute 'text'

Davamlı olmaq üçün bir veb səhifəyə etibar edə bilmərik. HTML-i təhlil edərkən səhv çıxma ehtimalı daha çoxdur.

Əvvəlki kod None dəyəri olmayan bir maddəyə qarşı çıxdığına görə bir səhv atır. Veb səhifəsinin vahid olmasını gözləyə bilmərik. Bəzi işlər digərlərindən fərqli olaraq reklam edilə bilər, buna görə fərqli nəticələr verirlər. Proqramı HTML-də təhlil edərkən həll etməliyik.

for job in jobs:
    title=job.find('h2',class_='title')
    company=job.find('div',class_='company')
    location=job.find('div',class_='location')
    if None in (title, company, location):
        continue
    print(title.text.strip())
    print(company.text.strip())
    print(location.text.strip())
    print()

Heç bir başlıq, şirkət və ya yer üçün Yoxdur olan iş elementlərini aradan qaldırmaq üçün şərti bir bəyanat daxil edirik. Əgər maraqlanırsınızsa, elementlərdən birinin Nə üçün geri döndüyünü öyrənə bilərsiniz.

Bu dəyişiklikləri etdikdən sonra çıxışı yoxlayın. İndi daha yaxşı görünür:

Base24 Application developer - FULL TIME & Contract (C2C)
Cystems Logic
Columbus, OH

Application Developer
Atash Enterprises, LLC
Columbus, OH

Sinif adı və mətn məzmununa görə elementləri tapın

Bu vəzifələri və iş yerini təklif edən şirkət olan Software Developer Jobs siyahısını topladıq. Yalnız bir Python Developer mövqeyi axtarırsınızsa, skriptdə dəyişikliklər edə və daha faydalı edə bilərik. Bütün işləri çap etmək əvəzinə yalnız Python Developer işlərini süzə bilərik.

The element iş başlığını sarar. Xüsusi məlumatları süzmək üçün 'string' arqumentindən istifadə edə bilərsiniz.

python_jobs = results.find_all('h2', string='Python Developer')

Yuxarıda göstərilən kod, Python Developer ilə uyğun gələn simli axtarır elementlər. Find_all metodunu birbaşa nəticələr dəyişəninə zəng edə bilərsiniz. İndi python_jobs dəyişənini konsolunuza yazdırın və nəticəni yoxlayın. Boş bir siyahı qaytarır.

[]

Nəticələrdə bir Python geliştirici işi var. Ancaq dəqiq sətri yoxlayan '=' operatoruna bərabər istifadə etdiyimiz üçün düzgün süzülmür. İş elanının alt və ya yuxarı vəziyyəti, iplə uyğunlaşmasının qarşısını alır. Simli axtarış üçün ümumiləşdirilmiş bir yol tapmalıyıq.

Bir funksiyanı gözəl bir şorba metoduna keçirin

Biz yalnız simli arqumentini deyil, həm də gözəl şorba obyektinə arqument kimi funksiyaları ötürə bilərik. Python geliştirici işlərini əldə etmək üçün kodu bir az dəyişdirin.

python_jobs = results.find_all('h2', string=lambda text: 'python' in text.lower())

Lambda funksiyası nədir, hər birinin mətnini çevirir kiçik hərflə element və mətndə 'python' alt sətrinin olub olmadığını yoxlayır. İndi bir iş göndərdik:

Python Developer
Atash Enterprises, LLC
Columbus, OH

Bir uyğunluq tapmasanız, narahat olmayın. Çünki veb səhifədəki iş elanları tez-tez dəyişməyə davam edir. Mətn məzmunundan istifadə edərək veb səhifədəki müvafiq məlumatları tapmaq prosesi güclüdür. Gözəl şorba istifadə edərək bunu dəqiq sətri yoxlayaraq və ya mətni süzgəcdən keçirmək üçün bir arqument kimi bir funksiyanı ötürərək edə bilərsiniz.

HTML Elementlərindən Xüsusiyyətləri çıxarın

İndi müvafiq işləri, şirkəti və iş yerlərini süzdük. Burada əskik olan yalnız iş üçün müraciət etməliyik.

Səhifəyə baxarkən fərq edə bilərsən, HTML sinifinin 'başlığı' olan elementdə bağlantı var. .Text yalnız mətn məzmununu qaytarır və əlaqəni qaçırır. URL almaq üçün atributu çıxarmaq lazımdır.

Python_jobs dəyişəninin çıxışını yoxlayın. URL etiketin href atributunda mövcuddur . Bizdə element var. Sonra kvadrat mötərizədən istifadə edərək href atributunun dəyərini əldə edin.

python_jobs = results.find_all('h2', string=lambda text: 'python' in text.lower())

for job in python_jobs:
    link = job.find('a')['href']
    print(job.text.strip())
    print(f"Apply here: {link}\n")

Çıxış süzülmüş python geliştirici işlərinin bağlantısını göstərir.

nəticə

Bu təlimatda, Gözəl Çorba istifadə edərək Python Veb Sıyırma haqqında məlumat əldə etdiniz. Aşağıdakı məqamları əhatə etdik

  • Developer Tools istifadə edərək brauzerdəki veb səhifəni necə yoxlamaq olar.
  • URL-də kodlanmış məlumatdan necə istifadə etmək olar.
  • Python-un sorğu kitabxanasından istifadə edərək bir veb səhifənin HTML məzmununu necə yükləmək olar.
  • HTML məlumatlarını necə təhlil etmək və yalnız müvafiq məlumatları almaq üçün gözəl şorba istifadə edin.
  • Statik, gizli və ya dinamik bir veb səhifəni qırmadan əvvəl hansı məqamları nəzərə almalıyıq.

Statik HTML cavablarını qaytaran digər iş lövhələri var, bu saytları ziyarət edərək təcrübə edə bilərsiniz.

Translate »