❗ Atsakomybės apribojimas : tai 3 dalis mūsų šešių dalių serijos, skirtos išplėstiniam žiniatinklio iškarpymui. Naujas serialas? Pradėkite nuo pradžių skaitydami 1 dalį !
Išplėstinio žiniatinklio rinkimo serijos 2 dalyje sužinojote, kaip rinkti duomenis iš SPA, PWA ir AI valdomų svetainių . Iki šiol turėtumėte turėti visas žinias, kurių reikia norint sukurti grandiklį, kuris veiktų daugelyje šiuolaikinių svetainių.
Kas toliau? Laikas optimizuoti grandiklį pasitelkus keletą profesionalių grandymo patarimų ir gudrybių!
Sukurti žiniatinklio grandiklį? Tai viskas apie scenarijų . 👨💻
Ir būkime sąžiningi – jei kada nors rašėte kodą, žinote, kad scenarijus dažniausiai nėra toks sunkus. Keletas eilučių čia, a for
ten ir bum – renkate duomenis kaip profesionalas. Skamba paprastai, tiesa? 😄
Tačiau čia yra problema: paprastumas rašant mažą grandiklį gali užliūliuoti klaidingą saugumo jausmą. Kam rūpintis tinkamais komentarais, klaidų tvarkymu, žurnalais ar net tvarkingomis įtraukomis, kai tai tik keliolika kodo eilučių, kurias gali perskaityti visi?
Suprantame – kam perprojektuoti tai, kam to nereikia? Perdėta inžinerija yra pažangos priešas. Bet kas nutinka, kai reikia išplėsti grandiklius į kelis puslapius ar net visas svetaines? 🤔
Štai tada jūsų greitas ir purvinas, spagečiais užkoduotas grandiklis suyra! 🍝
Štai kodėl jums reikia pažangių žiniatinklio grandymo patarimų.
Turbūt jau girdėjote įprastus žiniatinklio rinkimo patarimus: pirmiausia nustatykite pirmenybę puslapiams su svarbiais duomenimis, atsitiktine tvarka suskirstykite užklausas ir pan. Puikus patarimas, bet būkime sąžiningi, šios gudrybės yra senos naujienos. 📰
Kai susiduriate su sudėtingesniais scenarijais, šie pagrindai gali to nepadaryti. Jei tikrai norite išlyginti savo grandymo žaidimą, turėsite ištirti kai kuriuos kito lygio metodus.
Pasiruošę? Prisisekite – laikas pakelti žiniatinklio rinkimo įgūdžius į kitą lygį! 💪
⚠️ Įspėjimas: nesijaudinkite, jei kai kurie patarimai jums pažįstami – tęskite! Pasineriant gilyn, yra daug įdomių įžvalgų! 🤿
Viena iš dažniausiai pasitaikančių klaidų žiniatinklyje yra pamiršimas, kad internetas nėra kokia nors stebuklinga, neklystanti technologija. Kai siunčiate užklausą svetainei, daugybė dalykų gali (ir tam tikru momentu) suklysti. ❌
Pažvelkime į kai kuriuos dažniausiai pasitaikančius scenarijus:
Jūsų „Wi-Fi“ ryšys arba ryšys gali trumpam sutrukdyti
Serveris, kuriame yra svetainė, gali būti nepasiekiamas
Puslapis, kurio ieškote, gali nebeegzistuoti
Tikslinė svetainė gali laikinai sulėtėti, todėl gali atsirasti skirtojo laiko klaida
Dabar sumaišykite duomenų analizę, išankstinį apdorojimą ir eksportavimą į duomenų bazę ir turėsite puikų chaoso receptą. 💥
Taigi, koks sprendimas? Klaidos tvarkant ! 🛡️
Klaidų tvarkymas yra geriausias jūsų žiniatinklio rinkimo draugas. Tikėtina, kad jūsų scenarijus apdoros dešimtis (ar tūkstančius) puslapių, o dėl vienos klaidos visa operacija neturėtų nutrūkti.
Atminkite, kad try ... catch
blokas yra jūsų draugas. Naudokite jį savo užklausoms ir apdorojimo logikai apibendrinti. Be to, atminkite, kad dauguma HTTP bibliotekų nekelia išimčių dėl netinkamų HTTP atsakymų (pvz., 404
arba 500
). 😲
Jei nesate susipažinę su HTTP būsenos kodais , žiūrėkite toliau pateiktą vaizdo įrašą:
Pavyzdžiui, Python užklausų bibliotekoje turite rankiniu būdu patikrinti atsakymo būsenos kodą taip:
import requests response = requests.get("https://example.com") if response.status_code == 200: # handle the successful response... else: # handle the error response...
Arba lygiaverčiai naudokite metodą raise_for_status() :
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...
Išplėstinis žiniatinklio nuskaitymo scenarijus turėtų ne tik tvarkyti klaidas, bet ir jas atkurti. Kadangi dauguma klaidų, susijusių su žiniatinklio nuskaitymu, yra susijusios su žiniatinklio užklausų teikimu, galite žymiai pagerinti grandiklio efektyvumą įdiegę pakartotinai bandomas užklausas .
Koncepcija paprasta: jei užklausa nepavyksta, bandykite dar kartą – vieną, du, tris ar daugiau kartų, kol ji bus sėkminga. 🔄
Tačiau čia yra klaida: kadangi viena iš dažniausiai pasitaikančių nesėkmingos užklausos priežasčių yra tai, kad tikslinis serveris laikinai neveikia arba sulėtėja, nenorite jo užgožti pakartotinai siųsdami tą pačią užklausą per trumpą laiką.
Jei užklausa nepavyks dabar, tikėtina, kad ji vėl nepavyks iš karto. Štai kur atsiranda eksponentinis atsitraukimas !
Užuot bandę iš karto, ši technika palaipsniui didina laiką tarp bandymų ir padidina jūsų sėkmės galimybes, suteikiant tiksliniam serveriui laiko atsigauti. ⏳
Nors galite rankiniu būdu įdiegti paprastas pakartotinio bandymo strategijas naudodami tinkintą kodą, daugelis HTTP klientų yra su integruotomis programomis arba bibliotekomis, kurios automatiškai tvarko pakartotinius bandymus. Pavyzdžiui, „Axios“ siūlo „axios-retry“ biblioteką, kurią galite naudoti taip:
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));
Panašiai „Python“ urllib3
pakete yra „Retry“ klasė, kuri sklandžiai integruojasi su daugeliu Python HTTP klientų .
Tikrindami elementus „DevTools“, gali kilti pagunda dešiniuoju pelės mygtuku spustelėti ir pasirinkti parinktį „Kopijavimo parinkiklis“:
Tačiau perspėkite, rezultatas gali atrodyti maždaug taip:
#__next > div > main > div.sc-d7dc08c8-0.fGqCtJ > div.sc-93e186d7-0.eROqxA > h1
Tai tikrai nėra ideali žiniatinklio grandymui….
Problema? Tokie pernelyg konkretūs parinkikliai, kaip šie, gali lengvai sugesti, kai pasikeičia puslapio struktūra. Kuo išsamesnis parinkiklis, tuo trapesnis jis tampa.
Kad žiniatinklio grandymas taptų atsparesnis, parinkiklius turite išlaikyti lanksčius. Užuot pasikliavę su stiliumi susijusiomis klasėmis (kurios nuolat keičiasi), sutelkite dėmesį į atributus, kurie mažiau tikėtina, kad keisis, pvz., id
, data-
arba aria-
. Dauguma šių atributų yra skirti testavimui ir pritaikymui pasiekti , todėl laikui bėgant jie paprastai išlieka nuoseklūs. 💡
Ir nors CSS parinkiklius lengviau skaityti ir suprasti, XPath siūlo daugiau galios. Tačiau nesijaudinkite – dažnai galite pasiekti tuos pačius rezultatus naudodami paprastus CSS parinkiklius, todėl jums nereikia sudėtingo XPath kodo. 😌
Norėdami gauti daugiau informacijos apie tai, peržiūrėkite mūsų XPath ir CSS parinktuvų vadovą!
HTML puslapių analizavimas reikalauja laiko ir išteklių, ypač jei susiduriate su dideliu, įdėtu DOM. Jei jūsų grandiklis analizuoja tik kelis puslapius, tai nėra toks didelis dalykas.
Dabar, kas atsitiks, kai grandymo operacija padidės ir turėsite gauti duomenis iš milijonų puslapių? Šios nedidelės papildomos išlaidos gali greitai išeikvoti serverio išteklius ir pridėti valandų prie bendro duomenų rinkimo laiko. ⏳
Norėdami geriau suprasti, žr. šiuos išteklius:
Ieškote išsamaus palyginimo? Perskaitykite mūsų straipsnį apie geriausius HTML analizatorius .
Geros naujienos? Perjungti iš vieno analizatoriaus į kitą nėra taip sunku. Pavyzdžiui, „BeautifulSoup“ tai tik paprastas parametro pakeitimas:
from bs4 import BeautifulSoup # or using html.parser soup = BeautifulSoup(html_content, "html.parser") # or using lxml parser soup = BeautifulSoup(html_content, "lxml")
O kaip su HTML analizatoriais, integruotais naršyklėse, pvz., „Chrome“? 🤔
Sužinokite daugiau toliau pateiktame vaizdo įraše:
HTTP/2 yra atnaujinta HTTP versija, leidžianti vienu ryšiu pateikti kelias užklausas. Tai sumažina delsą ir gali pagerinti bendrą grandymo užduoties našumą.
Norėdami patikrinti, ar svetainė palaiko HTTP/2, tiesiog atidarykite Kūrėjų įrankius savo naršyklėje, eikite į skirtuką „Tinklas“ ir ieškokite stulpelio „Protokolas“ – jei jame parašyta h2
, svetainė naudoja HTTP/2:
Deja, ne visi HTTP klientai ir duomenų rinkimo bibliotekos palaiko HTTP/2. Tačiau tokie įrankiai kaip HTTPX, skirtas Python, siūlo visišką HTTP/2 palaikymą .
Žiniatinklio rinkimas dažniausiai yra įvesties / išvesties užduotis – siunčiate užklausas serveriui, laukiate atsakymo, apdorojate duomenis ir kartojate. Laukimo metu jūsų grandiklis iš esmės neveikia, o tai neefektyvu.
Sprendimas? Lygiagretumas arba lygiagretumas !
Siųsdami kelias užklausas vienu metu, galite sumažinti laiką ir optimizuoti tinklo naudojimą.
🚨 Bet būkite atsargūs! 🚨
Bombarduojant serverį pateikiant per daug vienu metu teikiamų užklausų, gali būti apribotas greitis arba uždraustas jūsų IP – dvi populiarios apsaugos nuo įbrėžimų priemonės . 😬
Profesionalų patarimas : taip pat galite lygiagrečiai analizuoti užduotis, ypač jei naudojate kelis procesorius, o tai pagreitins duomenų išgavimo procesą. ⚡
Dirbtiniu intelektu pagrįsti prisitaikantys algoritmai mokosi iš duomenų ir HTML puslapių struktūrų modelių, pritaikydami savo elgesį realiuoju laiku, kad neatsiliktų nuo pokyčių. 😮
Tai pakeitimas žiniatinklyje! 🤯
Kai svetainės atnaujina savo išdėstymą arba diegia kovos su robotais priemones, šie algoritmai gali greitai prisitaikyti ir užtikrinti, kad jūsų grandiklis veiktų sklandžiai. 🧠
Trumpai tariant, jie daro grandiklius išmanesnius ir padeda efektyviai išgauti duomenis, net kai svetainėje atsiranda netikėtų kreivių kamuolių. ⚾ Naudojant prisitaikančius algoritmus, tai tarsi grandiklis, kuris laikui bėgant tobulėja!
Sužinokite daugiau šio Forrest Knight vaizdo įrašo 4 skyriuje:
Žinoma, visi patarimai ir gudrybės, kuriuos minėjome iki šiol, gali padaryti jūsų grandiklį greitesnį, patikimesnį, tvirtesnį ir efektyvesnį. Bet būkime tikri – jie taip pat suteikia daug sudėtingumo. 😅
Geros naujienos yra tai, kad dauguma šių pamokų taikomi daugumai grandymo projektų. Taigi, užuot koduodami viską nuo nulio, galite naudoti iš anksto sukurtas funkcijas tam tikroms užduotims atlikti. Būtent tai siūlo „Bright Data“ grandymo funkcijos !
Naudodami 73 ir daugiau paruoštų „JavaScript“ funkcijų, vartotojai sukūrė daugiau nei 38 tūkst. grandiklius, veikiančius 195 ir daugiau šalių. Tai tona grandymo galios! 📈
Paspartinkite savo kūrimą naudodami vykdymo aplinką, sukurtą be vargo rinkti, atrakinti ir keisti žiniatinklio duomenų rinkimą:
Dabar žinote, kaip padidinti grandiklį, pasinaudoję patyrusių grandymo kūrėjų įžvalgomis!
Atminkite, kad tai tik 3 dalis, todėl dar tik įpusėjome šešių dalių kelionę į pažangų žiniatinklio rinkimą! Saugos diržą laikykite prisisegę, nes ketiname pasinerti į dar pažangiausias technologijas, sumanius sprendimus ir patarimus, kurie nėra viešai prieinami.
Kita stotelė? Išnaudokite dirbtinio intelekto valdomo tarpinio serverio valdymo galią! 🌐