Veebi kraapimine, tuntud ka kui veebiandmete ekstraheerimine, on automaatne meetod andmete või sisu veebilehtedelt ekstraheerimiseks.

Veebikaabitsad automatiseerivad andmete eraldamise ilma inimese sekkumiseta. Kaabits pääseb veebilehele juurde HTTP-päringuid saates, sarnaselt veebibrauseriga. Tõmbava HTML-i kuvamise asemel töötleb see seda vastavalt teie juhistele ja salvestab tulemuse.

Veebikaabitsad on kasulikud andmete toomiseks veebisaitidelt, mis ei paku API-sid. Need on populaarsed sellistes valdkondades nagu andmeteadus, küberturvalisus, kasutajaliides ja taustaprogrammide arendus.

Veebi kraapimine Go-s

Go-s on mitmesuguseid veebikraapimise pakette. Populaarsete hulka kuuluvad goquery, Colly ja ChromeDP.

ChromeDP on seleenitaoline veebidraiveri pakett. See toetab Chrome'i arendajatööriistade protokolli Go's ilma sõltuvusteta.

Colly on veebikraapimise spetsiifiline teek, mis on loodud goquery abil. Kuid goquery on Go-s veebisaitide kraapimiseks kiirem valik.

Mis on goquery?

CSS-i teek jQuery aitas inspireerida

goquery. See on Go raamatukogu, mis põhineb net/html pakett, mis rakendab HTML5-ga ühilduvat tokenisaatorit ja parserit. Samuti kasutab see Cascadia paketti, mis rakendab CSS-i selektoreid kasutamiseks koos parseriga, mille pakub net/html.

Goquery paigaldamine

Käivitage allolev käsk oma terminalis, et installida goquery. Kui ilmnevad vead, proovige oma Go versiooni värskendada.

mine hankige github.com/PuerkitoBio/goquery

Veebi kraapimise protsess

Saate jagada kogu kraapimisprotsessi kolmeks väiksemaks ülesandeks:

  1. HTTP-päringute tegemine.
  2. Selektorite ja lokaatorite kasutamine vajalike andmete saamiseks.
  3. Andmete salvestamine andmebaasi või andmestruktuuridesse edasiseks töötlemiseks.

HTTP-päringute tegemine Go-s

HTTP-päringuid saate saata kasutades net/http pakett, mida Go standardteek sisaldab.

pakett peamine

importida "net/http"
importida "logi"
importida "fmt"

funcpeamine() {
webUrl := "https://news.ycombinator.com/"
vastus, err:= http. Hangi (webUrl)

kui eks!= null {
logi. Fatalln (viga)
} muidukui vastuseks. Olekukood == 200 {
fmt. Println ("Me saame selle kraapida")
} muidu {
logi. Fatalln ("Ära kraapige seda")
}
}

http. Hangi tagastab vastuse keha ja vea. vastuseks. Olekukood on päringu-vastuse olekukood.

HTTP-päringute tegemisel, kui vastuse olekukood on 200 võite jätkata veebisaidi kraapimist.

Nõutavate andmete hankimine goquery abil

Veebisaidi HTML-i hankimine

Kõigepealt tuleb vastusest (vastus.keha), et saada veebilehte esindav terviklik dokumendiobjekt:

dokument, err := goquery. NewDocumentFromReader (vastus. keha)

kui eks!= null {
logi. Fatalln (viga)
}

Nüüd saate kasutada dokumendiobjekti, et pääseda juurde veebilehe struktuurile ja sisule.

HTML-ist nõutavate elementide valimine

Peate veebilehte kontrollima, et kontrollida ekstraheeritavate andmete struktuuri. See aitab teil sellele juurdepääsuks luua valija.

Selektorite ja lokaatorite abil saate vajaliku HTML-i ekstraktida, kasutades Otsi dokumendiobjekti meetod.

The Otsi meetod kasutab CSS-i valijat, et leida vajalikke andmeid sisaldav element:

dokument. Find("tr.athing")

Ülaltoodud kood tagastab ainult esimese valijale vastava HTML-elemendi või tühja loendi, kui vastet ei leitud.

HTML-ist mitme elemendi valimine

Enamasti soovite tuua kõik HTML-elemendid, mis vastavad teie valijale.

Saate valida kõik HTML-is sobivad elemendid, kasutades Iga väärtuse meetod, mis Otsi () naaseb. The Iga meetod võtab funktsiooni kahe parameetriga: indeks ja valija tüübi *goquery. Valik.

dokument. Find("tr.athing").Iga(func(indeks int, valija *goquery. valik) {
/* Protsessi valija siin */
})

Funktsiooni kehas saate valida HTML-ist soovitud andmed. Sel juhul vajate iga lehe loendis oleva postituse linke ja pealkirju. Kasuta Otsi valija parameetri meetod elementide komplekti kitsendamiseks ja teksti või atribuudi väärtuste eraldamiseks.

dokument. Find("tr.athing").Iga(func(indeks int, valija *goquery. valik) {
pealkiri := valija. Find("td.title").Tekst()
link, leitud := valija. Find("a.titlelink").Attr("href")
})

Ülaltoodud kood kutsub esile Tekst meetodist saadud tulemus valija. Otsi tabeli lahtri sisu eraldamiseks. Atribuutide (nt lingi ja pildi URL-ide) valimiseks peate kasutama Attr meetod. See meetod tagastab ka väärtuse, mis näitab, kas atribuut on üldse olemas.

Protsess on sama mis tahes elementide ja atribuutide valimisel veebilehelt.

The Otsi meetod on väga võimas, võimaldades laias valikus toiminguid HTML-elementide valimiseks ja leidmiseks. Saate neid uurida goquery dokumentatsioonist.

Kraabitud andmete salvestamine

Lingi atribuut ja pealkiri on stringid, mille saate muutujatele määrata. Tegelike stsenaariumide korral salvestate manipuleerimiseks andmebaasi või andmestruktuuri. Sageli piisab lihtsast kohandatud struktuurist.

Looge väljadega struktuur pealkiri ja link ning osa struktuure struktuuritüübi hoidmiseks.

tüüp Teave struktuur {
link string
pealkiri string
}
info := tegema([]Teave, 0)

Kui olete struktuuri ja lõigu loonud, sisestage dokumendimeetodi funktsiooni põhiosas jaotis funktsioonis, mille edastate Otsi meetodile. Kasutage struktuuri tüüpi uute andmestruktuuride loomiseks, millest igaüks sisaldab ühte tulemust.

info = lisama(info, teave{
pealkiri: pealkiri,
link: link,
})

See lisab tüübid Teave(struktuur) juurde info(lõik), mille andmetega saate oma äranägemise järgi manipuleerida.

Lõigu printimine näitab, et olete veebisaidi edukalt kraapinud ja lõigu asustanud.

fmt. Println (info)

Kaabitud andmed on mõistlik salvestada lokaalsesse vahemällu, et veebilehe serverisse ei satuks rohkem kui vaja. See mitte ainult ei vähenda liiklust, vaid kiirendab teie rakendust, kuna kohalike andmete toomine on kiirem kui päringute esitamine ja veebisaitide kraapimine.

Go-s on palju andmebaasipakette, mida saate andmete salvestamiseks kasutada. The andmebaas/sql pakett toetab SQL-andmebaase. Samuti on olemas NoSQL-i andmebaasikliendid, näiteks MongoDB Go draiverja serverita andmebaasid, nagu FaunaDB, kasutades FaunaDB draiver.

Veebi kraapimise olemus Go-s

Kui proovite veebisaidilt andmeid koguda, on goquery suurepärane koht alustamiseks. Kuid see on võimas pakett, mis suudab teha enamat kui lihtsalt veebikraapimine. Lisateavet selle funktsioonide kohta leiate projekti ametlikust dokumentatsioonist.

Veebi kraapimine on oluline oskus erinevates tehnoloogiavaldkondades ja see tuleb kasuks paljude teie projektide puhul.

Kuidas Go-s objektorienteeritud programmeerimise kontseptsioone rakendada

Loe edasi

JagaSäutsJagaMeil

Seotud teemad

  • Programmeerimine
  • Veebiarendus
  • Programmeerimine

Autori kohta

Ukeje Chukwuemeriwo headus (3 artiklit avaldatud)

Goodness on tehniline kirjanik, taustaprogrammi arendaja ja andmeanalüütik, kes lihtsustab seda põnevat valdkonda uurides erinevaid tehnoloogiateemasid.

Veel Ukeje Chukwuemeriwo Goodnessilt

Liituge meie uudiskirjaga

Liituge meie uudiskirjaga tehniliste näpunäidete, arvustuste, tasuta e-raamatute ja eksklusiivsete pakkumiste saamiseks!

Tellimiseks klõpsake siin