❗ İmtina : Bu, Qabaqcıl Veb Scraping üzrə altı hissədən ibarət seriyamızın 3-cü hissəsidir. Serialda yenisiniz? 1-ci hissəni oxumaqla əvvəldən başlayın !
Qabaqcıl Veb Scraping seriyamızın 2-ci hissəsində siz SPA-lardan, PWA-lardan və AI ilə işləyən saytlardan məlumatların necə silinəcəyini öyrəndiniz. İndiyə qədər, əksər müasir veb saytlara qarşı işləyən bir kazıyıcı qurmaq üçün lazım olan bütün biliklərə sahib olmalısınız.
Sonra nə var? Bəzi peşəkar kazıma məsləhətləri və fəndləri ilə kazıyıcınızı optimallaşdırmağın vaxtı gəldi!
Veb kazıyıcı qurmaq? Hər şey skriptlə bağlıdır. 👨💻
Düzünü desək, əgər siz nə vaxtsa kod yazmısınızsa, bilirsiniz ki, skript yazmaq çox vaxt o qədər də çətin deyil. Burada bir neçə sətir, orda for
və bum, siz məlumatı peşəkar kimi kazıyırsınız. Sadə səslənir, elə deyilmi? 😄
Ancaq problem buradadır: kiçik bir kazıyıcı yazmağın sadəliyi sizi yalançı təhlükəsizlik hissi ilə sakitləşdirə bilər. Hər kəsin oxuya biləcəyi cəmi bir neçə sətir kod olduğu halda, düzgün şərhlər, xətaların idarə edilməsi, qeydlər və hətta səliqəli abzaslarla niyə narahat olursunuz?
Biz başa düşürük - niyə ehtiyacı olmayan bir şeyi həddindən artıq mühəndisləşdiririk? Həddindən artıq mühəndislik tərəqqinin düşmənidir . Bəs kazıyıcılarınızı birdən çox səhifəyə və ya hətta bütün saytlara miqyaslaşdırmaq lazım olduqda nə baş verir? 🤔
Tez və çirkli, spagetti kodlu kazıyıcınız dağılır! 🍝
Budur, sizə bəzi qabaqcıl veb kazıma məsləhətlərinə ehtiyacınız var.
Siz artıq adi veb kazıma məsləhətlərini eşitmiş olmalısınız: əvvəlcə kritik məlumatları olan səhifələrə üstünlük verin, sorğularınızı təsadüfiləşdirin və s. Əla məsləhətdir, amma düzünü desək, bu hiylələr köhnə xəbərlərdir. 📰
Daha təkmil ssenarilərlə məşğul olduğunuz zaman, bu əsaslar onu kəsməyə bilər. Əgər həqiqətən kazıma oyununuzu səviyyəyə qaldırmaq istəyirsinizsə, bəzi növbəti səviyyəli texnikaları araşdırmalı olacaqsınız.
Hazırsan? Bağlayın - veb kazıma bacarıqlarınızı növbəti səviyyəyə daşımağın vaxtı gəldi! 💪
⚠️ Xəbərdarlıq: Bəzi məsləhətlər sizə tanışdırsa, narahat olmayın - davam edin! Daha dərinə daldıqca çoxlu maraqlı məlumatlar var! 🤿
Veb kazıma zamanı ən çox yayılmış səhvlərdən biri İnternetin sehrli, yanılmaz bir texnologiya olmadığını unutmaqdır. Bir sayta sorğu göndərdiyiniz zaman, bir sıra şeylər səhv ola bilər (və nə vaxtsa olacaq). ❌
Bəzi ümumi ssenarilərə baxaq:
Wi-Fi və ya bağlantınız bir anda hıçqıra bilər
Veb saytı yerləşdirən server əlçatan olmaya bilər
Axtardığınız səhifə artıq mövcud olmaya bilər
Hədəf saytda müvəqqəti yavaşlama baş verə bilər ki, bu da zaman aşımı xətasına səbəb olur
İndi məlumatların təhlili, əvvəlcədən işlənməsi və verilənlər bazasına ixracını qarışdırın və xaos üçün mükəmməl bir reseptiniz var. 💥
Yaxşı, həll yolu nədir? İdarəetmə xətası ! 🛡️
Səhvlərin idarə edilməsi veb kazımada ən yaxşı dostunuzdur. Skriptiniz çox güman ki, onlarla (və ya minlərlə) səhifəni işləyəcək və bir səhv bütün əməliyyatınızı sıradan çıxarmamalıdır.
Unutmayın ki, try ... catch
bloku sizin dostunuzdur. İstəklərinizi və emal məntiqinizi bağlamaq üçün ondan istifadə edin. Həmçinin, unutmayın ki, əksər HTTP kitabxanaları pis HTTP cavabları üçün istisnalar qaldırmır (məsələn, 404
və ya 500
). 😲
Əgər HTTP status kodları ilə tanış deyilsinizsə, aşağıdakı videoya baxın:
Məsələn, Python sorğular kitabxanasında cavab status kodunu aşağıdakı kimi əl ilə yoxlamaq lazımdır:
import requests response = requests.get("https://example.com") if response.status_code == 200: # handle the successful response... else: # handle the error response...
Və ya ekvivalent olaraq, rise_for_status() metodundan istifadə edin:
import requests try: response = requests.get("https://example.com") # raises an HTTPError for bad responses (4xx or 5xx) response.raise_for_status() # handle the successful response... except requests.exceptions.HTTPError as http_err: # handle an HTTP error... except requests.exceptions.RequestException as req_err: # handle a request error...
Qabaqcıl veb kazıma skriptiniz yalnız səhvləri idarə edə bilməməli, həm də onlardan qurtulmalıdır. Veb kazıma ilə əlaqəli səhvlərin əksəriyyəti veb sorğuları ilə əlaqəli olduğundan, təkrar cəhd edilə bilən sorğuları həyata keçirməklə kazıyıcınızın effektivliyini əhəmiyyətli dərəcədə artıra bilərsiniz .
Konsepsiya sadədir: sorğu uğursuz olarsa, müvəffəqiyyətli olana qədər yenidən cəhd edin - bir, iki, üç və ya daha çox dəfə. 🔄
Ancaq burada diqqət çəkən məqam budur: uğursuz sorğunun ən çox yayılmış səbəblərindən biri hədəf serverin müvəqqəti olaraq işləməməsi və ya yavaş olması olduğundan, eyni sorğunu qısa müddət ərzində dəfələrlə göndərməklə onu sıxışdırmaq istəmirsiniz.
Əgər sorğu indi uğursuz olarsa, o, dərhal yenidən uğursuz ola bilər. Eksponensial geriləmə oyuna girdiyi yerdir!
Dərhal təkrar cəhd etmək əvəzinə, bu texnika təkrar cəhdlər arasındakı vaxtı tədricən artırır və hədəf serverə bərpa etmək üçün vaxt verməklə uğur şansınızı artırır. ⏳
Fərdi kodla sadə təkrar cəhd strategiyalarını əl ilə həyata keçirə bilsəniz də, bir çox HTTP müştəriləri təkrar cəhdləri avtomatik idarə etmək üçün daxili yardım proqramları və ya kitabxanalarla gəlir. Məsələn, Axios, aşağıdakı kimi istifadə edə biləcəyiniz axios-retry kitabxanasını təklif edir:
const axios = require("axios"); const axiosRetry = require("axios-retry"); axiosRetry(axios, { retries: 3, retryDelay: axiosRetry.exponentialDelay }); axios.get('https://example.com') .then(response => console.log(response.data)) .catch(error => console.log("Request failed:", error));
Eynilə, Python-un urllib3
paketi əksər Python HTTP müştəriləri ilə problemsiz inteqrasiya edən Retry sinfi ilə gəlir.
DevTools-da elementləri yoxlayarkən, siz siçanın sağ düyməsini sıxıb "Kopyala seçici" seçimini seçə bilərsiniz:
Ancaq xəbərdarlıq edin, nəticə belə görünə bilər:
#__next > div > main > div.sc-d7dc08c8-0.fGqCtJ > div.sc-93e186d7-0.eROqxA > h1
Bu, şübhəsiz ki, veb kazıma üçün ideal deyil….
Problem? Bu kimi həddindən artıq xüsusi seçicilər səhifə strukturu dəyişdikdə asanlıqla poza bilər. Seçiciniz nə qədər detallı olsa, bir o qədər kövrək olur.
Veb qırıntınızı daha möhkəm etmək üçün seçicilərinizi çevik saxlamalısınız. Üslubla əlaqəli siniflərə (hər zaman dəyişən) etibar etmək əvəzinə, id
, data-
və ya aria-
kimi dəyişmə ehtimalı az olan atributlara diqqət yetirin . Bu atributların əksəriyyəti sınaq və əlçatanlıq üçün nəzərdə tutulub, ona görə də onlar zamanla ardıcıl qalmağa meyllidirlər. 💡
CSS seçicilərini oxumaq və başa düşmək daha asan olsa da, XPath daha çox güc təklif edir. Ancaq narahat olmayın - sadə CSS seçiciləri ilə çox vaxt eyni nəticələrə nail ola bilərsiniz və sizi mürəkkəb XPath koduna ehtiyacdan xilas edə bilərsiniz. 😌
Bununla bağlı əlavə məlumat üçün XPath vs CSS seçiciləri haqqında bələdçimizə nəzər salın!
HTML səhifələrinin təhlili vaxt və resurslar tələb edir, xüsusən də böyük, iç-içə DOM ilə məşğul olursunuzsa. Əgər kazıyıcınız yalnız bir neçə səhifəni təhlil edirsə, bu o qədər də böyük məsələ deyil.
İndi, kazıma əməliyyatınız böyüdükdə və milyonlarla səhifədən məlumat əldə etməli olduqda nə baş verir? Bu kiçik yük server resurslarını tez bir zamanda boşalda bilər və ümumi qırıntı vaxtınıza saatlar əlavə edə bilər. ⏳
Daha dərindən başa düşmək üçün bu resurslara müraciət edin:
Tam müqayisə axtarırsınız? Ən yaxşı HTML analizatorları haqqında məqaləmizi oxuyun.
Yaxşı xəbər? Bir analizatordan digərinə keçid o qədər də çətin deyil. Məsələn, BeautifulSoup -da bu, sadəcə sadə bir parametr dəyişikliyidir:
from bs4 import BeautifulSoup # or using html.parser soup = BeautifulSoup(html_content, "html.parser") # or using lxml parser soup = BeautifulSoup(html_content, "lxml")
Bəs Chrome kimi brauzerlərdə quraşdırılmış HTML analizatorları haqqında nə demək olar? 🤔
Aşağıdakı videoda daha çox məlumat əldə edin:
HTTP/2, bir əlaqə üzərindən birdən çox sorğuya icazə verən HTTP-nin yenilənmiş versiyasıdır. Bu, gecikməni azaldır və kazıma tapşırığınızın ümumi performansını yaxşılaşdıra bilər.
Saytın HTTP/2-ni dəstəklədiyini yoxlamaq üçün sadəcə olaraq brauzerinizdə DevTools-u açın, “Şəbəkə” sekmesine keçin və “Protokol” sütununu axtarın— h2
deyirsə, sayt HTTP/2-dən istifadə edir:
Təəssüf ki, bütün HTTP müştəriləri və kazıma kitabxanaları HTTP/2-ni dəstəkləmir. Bununla belə, Python üçün HTTPX kimi alətlər HTTP/2 üçün tam dəstək təklif edir .
Veb kazıma əsasən I/O ilə əlaqəli bir vəzifədir - serverə sorğu göndərirsiniz, cavabı gözləyirsiniz, məlumatları emal edirsiniz və təkrar edirsiniz. Gözləmə zamanı kazıyıcınız əsasən boşdur, bu da səmərəsizdir.
Həll yolu? Paralellik və ya paralellik !
Eyni anda birdən çox sorğu göndərməklə siz bu ölü vaxtları minimuma endirə və şəbəkə istifadəsini optimallaşdıra bilərsiniz.
🚨 Amma diqqətli olun! 🚨
Çox sayda eyni vaxtda sorğu ilə bir serveri bombalamaq sürətin məhdudlaşdırılmasına və ya IP-nin qadağan edilməsinə səbəb ola bilər - iki məşhur anti-scraping tədbiri . 😬
İpucu : Siz həmçinin təhlil tapşırıqlarını paralelləşdirə bilərsiniz, xüsusən də birdən çox CPU istifadə edirsinizsə, bu, məlumatların çıxarılması prosesini sürətləndirəcək. ⚡
Süni intellektə əsaslanan adaptiv alqoritmlər dəyişikliklərdən xəbərdar olmaq üçün real vaxt rejimində davranışlarını tənzimləyərək verilənlər və HTML səhifə strukturlarındakı nümunələrdən öyrənir. 😮
Bu veb kazıma üçün oyun dəyişdiricisidir! 🤯
Veb saytlar planlarını yenilədikdə və ya anti-bot tədbirləri tətbiq etdikdə, bu alqoritmlər tez uyğunlaşa bilər və kazıyıcınızın rəvan işləməsini təmin edir. 🧠
Bir sözlə, onlar kazıyıcıları daha ağıllı edir, hətta sayt gözlənilməz əyri toplar atdıqda belə məlumatları səmərəli şəkildə çıxarmağa kömək edir. ⚾ Uyğunlaşan alqoritmlərlə bu, zamanla inkişaf edən kazıyıcıya sahib olmaq kimidir!
Forrest Knight tərəfindən hazırlanmış bu videonun 4-cü fəslində daha çox məlumat əldə edin:
Əlbəttə, indiyə qədər qeyd etdiyimiz bütün məsləhətlər və tövsiyələr kazıyıcınızı daha sürətli, daha etibarlı, möhkəm və effektiv edə bilər. Ancaq gəlin real olaq - onlar həm də bir çox mürəkkəblik gətirir. 😅
Yaxşı xəbər budur ki, bu dərslərin əksəriyyəti kazıma layihələrinin böyük əksəriyyətinə aiddir. Beləliklə, hər şeyi sıfırdan kodlaşdırmaq əvəzinə, xüsusi tapşırıqları həll etmək üçün əvvəlcədən qurulmuş funksiyalardan istifadə edə bilərsiniz. Bright Data-nın Scraping Funksiyaları məhz bunu təklif edir!
73+ hazır JavaScript funksiyası ilə istifadəçilər 195+ ölkədə fəaliyyət göstərən 38K-dan çox kazıyıcı düzəldiblər. Bu, bir ton qırıntı gücüdür! 📈
Veb məlumatlarının toplanmasına səy göstərmədən qırmaq, kilidini açmaq və miqyasını artırmaq üçün hazırlanmış iş vaxtı mühiti ilə inkişafınızı sürətləndirin:
İndi təcrübəli kazıma tərtibatçılarının fikirləri ilə kazıyıcınızı necə səviyyəyə qaldıracağınızı bilirsiniz!
Unutmayın ki, bu, yalnız 3-cü hissədir, ona görə də biz təkmil veb kazıma üçün altı hissədən ibarət səyahətimizin yarısındayıq! Bu təhlükəsizlik kəmərini bağlı saxlayın, çünki biz daha qabaqcıl texnologiya, ağıllı həllər və insayder məsləhətləri ilə tanış olmaq üzrəyik.
Növbəti dayanacaq? Süni intellektə əsaslanan proksi idarəçiliyinin gücündən istifadə edin! 🌐