Žiniatinklio rinkimas, taip pat žinomas kaip žiniatinklio duomenų išskyrimas, yra automatizuotas duomenų ar turinio iš tinklalapių išgavimo būdas.

Žiniatinklio grandikliai automatizuoja duomenų gavimą be žmogaus įsikišimo. Grandiklis pasiekia tinklalapį siųsdamas HTTP užklausas, panašiai kaip žiniatinklio naršyklė. Tačiau užuot rodęs gautą HTML, jis apdoroja jį pagal jūsų instrukcijas ir išsaugo rezultatą.

Žiniatinklio grandikliai yra naudingi norint gauti duomenis iš svetainių, kuriose nėra API. Jie yra populiarūs tokiose srityse kaip duomenų mokslas, kibernetinis saugumas, priekinės sistemos ir užpakalinės programos kūrimas.

Žiniatinklio iškarpymas naudojant „Go“.

„Go“ yra įvairių žiniatinklio grandymo paketų. Populiariausi yra goquery, Colly ir ChromeDP.

„ChromeDP“ yra į seleną panašus žiniatinklio tvarkyklės paketas. Jis palaiko „Chrome“ kūrėjo įrankių protokolą „Go“ be priklausomybių.

Colly yra žiniatinklio rinkimui skirta biblioteka, sukurta naudojant goquery. Tačiau „Goquery“ yra greitesnis „Go“ svetainių rinkimo būdas.

instagram viewer

Kas yra goquery?

CSS biblioteka, jQuery, padėjo įkvėpti goquery. Tai „Go“ biblioteka, pagrįsta net/html paketą, kuriame įdiegtas su HTML5 suderinamas prieigos raktas ir analizatorius. Jis taip pat naudoja „Cascadia“ paketą, kuris įgyvendina CSS parinkiklius, skirtus naudoti su „net/html“ pateikta analizatoriumi.

„Goquery“ diegimas

Paleiskite toliau pateiktą komandą savo terminale, kad įdiegtumėte goquery. Jei atsiranda klaidų, pabandykite atnaujinti „Go“ versiją.

eik gaukite github.com/PuerkitoBio/goquery

Žiniatinklio išgryninimo procesas

Galite padalyti visą grandymo procesą į tris mažesnes užduotis:

  1. HTTP užklausų teikimas.
  2. Naudojant selektorius ir lokatorius gauti reikiamus duomenis.
  3. Duomenų išsaugojimas duomenų bazėje arba duomenų struktūrose tolesniam apdorojimui.

HTTP užklausų teikimas Go

Galite siųsti HTTP užklausas naudodami net/http paketą, kurį apima standartinė Go biblioteka.

paketą pagrindinis

importuoti "net/http"
importuoti "rąstas"
importuoti "fmt"

funcpagrindinis() {
webUrl := "https://news.ycombinator.com/"
atsakymas, klaida:= http. Gaukite (webUrl)

jeigu klysta! = nulis {
žurnalas. Fatalln (klysta)
} Kitasjeigu atsakymą. Būsenos kodas == 200 {
fmt. Println („Mes galime tai nubraukti“)
} Kitas {
žurnalas. Fatalln („Nekrapštyk šito“)
}
}

http. Gauk grąžina atsakymo turinį ir klaidą. atsakymą. Būsenos kodas yra užklausos-atsakymo būsenos kodas.

Pateikdami HTTP užklausas, jei atsakymo būsenos kodas yra 200 galite pereiti prie svetainės nuskaitymo.

Reikalingų duomenų gavimas naudojant goquery

Svetainės HTML gavimas

Pirmiausia turite išanalizuoti paprastą HTML iš atsakymo (atsakas.kūnas), kad gautumėte visą tinklalapį reprezentuojantį dokumento objektą:

dokumentas, klaida := goquery. NewDocumentFromReader (atsakymas. Kūnas)

jeigu klysta! = nulis {
žurnalas. Fatalln (klysta)
}

Dabar galite naudoti dokumento objektą, kad pasiektumėte tinklalapio struktūrą ir turinį.

Reikalingų elementų pasirinkimas iš HTML

Turėsite apžiūrėti tinklalapį, kad patikrintumėte reikiamų išgauti duomenų struktūrą. Tai padės sukurti parinkiklį, kad jį pasiektumėte.

Naudodami parinkiklius ir lokatorius, galite išgauti reikalingą HTML naudodami Rasti dokumento objekto metodas.

The Rasti metodas naudoja CSS parinkiklį, kad surastų elementą, kuriame yra reikalingi duomenys:

dokumentas. Rasti („tr.athing“)

Aukščiau pateiktas kodas grąžina tik pirmąjį HTML elementą, atitinkantį parinkiklį, arba tuščią sąrašą, jei atitikimo iš viso nebuvo.

Kelių elementų pasirinkimas iš HTML

Dažniausiai norėsite gauti visus HTML elementus, atitinkančius jūsų parinkiklį.

Galite pasirinkti visus atitinkančius elementus HTML naudodami kiekviena vertės metodas, kuris Rasti () grįžta. The kiekviena metodas naudoja funkciją su dviem parametrais: indeksu ir tipo * selektoriumigoquery. Pasirinkimas.

dokumentas. Rasti("tr.athing").Kiekvienas(func(indeksas tarpt, parinkiklis *goquery. Pasirinkimas) {
/* Proceso parinkiklis čia */
})

Funkcijos turinyje galite pasirinkti konkrečius norimus duomenis iš HTML. Tokiu atveju jums reikia kiekvieno puslapio sąraše esančio įrašo nuorodų ir pavadinimų. Naudoti Rasti parinkiklio parametro metodas, skirtas susiaurinti elementų rinkinį ir išgauti teksto ar atributo reikšmes.

dokumentas. Rasti("tr.athing").Kiekvienas(func(indeksas tarpt, parinkiklis *goquery. Pasirinkimas) {
pavadinimas := parinkiklis. Rasti("td.title").Tekstas()
nuoroda, rasta := parinkiklis. Find("a.titlelink").Attr("href")
})

Aukščiau pateiktas kodas iškviečia Tekstas rezultato metodas iš parinkiklis. Rasti išgauti lentelės langelio turinį. Pasirinkus atributus, pvz., nuorodos ir vaizdo URL, reikia naudoti Attr metodas. Šis metodas taip pat grąžina reikšmę, nurodant, ar atributas apskritai egzistuoja.

Procesas yra toks pat, kai pasirenkami bet kokie tinklalapio elementai ir atributai.

The Rasti metodas yra labai galingas, leidžiantis atlikti daugybę operacijų, skirtų pasirinkti ir rasti HTML elementus. Galite juos ištirti goquery dokumentacijoje.

Išsaugomų duomenų išsaugojimas

Nuorodos atributas ir pavadinimas yra eilutės, kurias galite priskirti kintamiesiems. Realiais atvejais išsaugosite duomenų bazėje arba duomenų struktūroje, kad galėtumėte manipuliuoti. Dažnai pakanka paprastos pasirinktinės struktūros.

Sukurkite struktūrą su laukais pavadinimas ir nuoroda bei struktūrų dalis, skirta struktūros tipui.

tipo Informacija struktūra {
nuoroda styga
titulą styga
}
info := padaryti([]Informacija, 0)

Sukūrę struktūrą ir skiltį, dokumento metodo funkcijos turinyje užpildykite funkcijos, kurią perduodate metodui Rasti, dalį. Naudokite struktūros tipą, kad sukurtumėte naujas duomenų struktūras, kurių kiekvienoje yra vienas rezultatas.

info = pridėti(informacija, informacija{
pavadinimas: titulas,
nuoroda: nuoroda,
})

Tai prideda tipų Informacija(struktūra) į info(gabalas), iš kurio galite manipuliuoti duomenimis, kaip norite.

Išspausdinus dalį rodoma, kad sėkmingai nubraukėte svetainę ir užpildėte dalį.

fmt. Println (informacija)

Nukopijuotus duomenis tikslinga išsaugoti vietinėje talpykloje, kad į tinklalapio serverį nepatektumėte daugiau nei reikia. Tai ne tik sumažins srautą, bet ir paspartins jūsų programą, nes vietinius duomenis galima gauti greičiau nei pateikti užklausas ir nuskaityti svetaines.

„Go“ yra daug duomenų bazių paketų, kuriuos galite naudoti duomenims išsaugoti. The duomenų bazė / sql paketas palaiko SQL duomenų bazes. Taip pat yra „NoSQL“ duomenų bazės klientų, tokių kaip „ MongoDB go vairuotojas, ir duomenų bazės be serverių, pvz., FaunaDB, naudojant FaunaDB vairuotojas.

Žiniatinklio grandymo esmė Go

Jei bandote išgauti duomenis iš svetainės, goquery yra puiki vieta pradėti. Tačiau tai yra galingas paketas, galintis padaryti daugiau nei tik žiniatinklio išgryninimą. Daugiau apie jo funkcijas galite sužinoti oficialioje projekto dokumentacijoje.

Interneto rinkimas yra svarbus įgūdis įvairiose technologijų srityse ir pravers atliekant daugelį jūsų projektų.

Kaip įdiegti objektinio programavimo koncepcijas Go

Skaitykite toliau

DalintisTviteryjeDalintisEl. paštas

Susijusios temos

  • Programavimas
  • Interneto kūrimas
  • Programavimas

Apie autorių

Ukeje Chukwuemeriwo gerumas (3 straipsniai paskelbti)

Goodness yra techninis rašytojas, užpakalinės programos kūrėjas ir duomenų analitikas, tyrinėdamas šią patrauklią sritį, supaprastinantis įvairias technologijų temas.

Daugiau iš Ukeje Chukwuemeriwo Goodness

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. knygų ir išskirtinių pasiūlymų!

Norėdami užsiprenumeruoti, spustelėkite čia