paint-brush
Žiniatinklio grandymo optimizavimas: greitesnių ir išmanesnių grandiklių patarimaipateikė@brightdata
363 skaitymai
363 skaitymai

Žiniatinklio grandymo optimizavimas: greitesnių ir išmanesnių grandiklių patarimai

pateikė Bright Data8m2024/11/15
Read on Terminal Reader

Per ilgai; Skaityti

Norint optimizuoti žiniatinklio grandiklius, reikia įdiegti pažangias technologijas, kad būtų galima efektyviau išgauti duomenis. Pagrindiniai patarimai apima klaidų apdorojimą, kad būtų galima valdyti ryšio problemas ir puslapių gedimus, pakartotinių bandymų naudojimas su eksponentiniu atsitraukimu, kad būtų išvengta serverių perkrovos, ir lanksčių CSS arba XPath parinktuvų rašymas, kad būtų išvengta lūžimo keičiant puslapio struktūrą. Norėdami greičiau iššifruoti, naudokite greitus HTML analizatorius, pvz., lxml, ir HTTP/2, kad sumažintumėte delsą siųsdami kelias užklausas vienu ryšiu. Šie metodai padeda efektyviai išmatuoti grandiklius, padidindami greitį ir atsparumą didelės apimties operacijoms.
featured image - Žiniatinklio grandymo optimizavimas: greitesnių ir išmanesnių grandiklių patarimai
Bright Data HackerNoon profile picture
0-item

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ų!

Žiniatinklio grandymas paprastas – ar taip?

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?


Komentarų nereikia... ar ne?


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! 🍝


Kūrėjai gali supykti, kai paliečiate jų kodą


Štai kodėl jums reikia pažangių žiniatinklio grandymo patarimų.

Žiniatinklio rinkimo optimizavimas: 7 geriausi patarimai ir gudrybės

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ų! 🤿

Įdiekite klaidų tvarkymą

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ą. 💥


Į mišinį sudėkite visus grandymo elementus


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...

Nesėkmių atkūrimas pateikus pakartotinius bandymus

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ą.


Laimei, tai nėra taip sudėtinga…


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ų .

Parašykite bendruosius selektorius

Tikrindami elementus „DevTools“, gali kilti pagunda dešiniuoju pelės mygtuku spustelėti ir pasirinkti parinktį „Kopijavimo parinkiklis“:


Parinkiklio kopijavimas iš DevTools


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….


O, neeee!


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ą!

Pirmenybę teikite greitiems HTML analizatoriams

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:

Panaudokite HTTP/2 greitesnėms užklausoms

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:


google.com 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ą .

Užduočių lygiagretavimas

Ž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.


Jūsų grandiklio užklausų apdorojimo greitis


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ą. ⚡

Priimkite AI pagrįstus prisitaikančius algoritmus

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:

Geriausias žiniatinklio įbrėžimo optimizavimo įrankis

Ž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ą:

Paskutinės mintys

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ą! 🌐

L O A D I N G
. . . comments & more!

About Author

Bright Data HackerNoon profile picture
Bright Data@brightdata
From data collection to ready-made datasets, Bright Data allows you to retrieve the data that matters.

PABAIGTI ŽYMES

ŠIS STRAIPSNIS BUVO PRISTATYMAS...