Nettskraping, også kjent som webdatautvinning, er en automatisert metode for å trekke ut data eller innhold fra nettsider.

Nettskrapere automatiserer datautvinning uten menneskelig innblanding. En skraper får tilgang til en nettside ved å sende HTTP-forespørsler, omtrent som en nettleser gjør. Men i stedet for å vise HTML-en den henter, behandler den den i henhold til instruksjonene dine og lagrer resultatet.

Nettskrapere er nyttige for å hente data fra nettsteder som ikke tilbyr APIer. De er populære innen felt som datavitenskap, cybersikkerhet, frontend og backend-utvikling.

Nettskraping i farten

I Go finnes det ulike nettskrapepakker. De populære inkluderer goquery, Colly og ChromeDP.

ChromeDP er en selenlignende nettdriverpakke. Den støtter Chrome utviklerverktøy-protokollen i Go uten avhengigheter.

Colly er et nettskrapingspesifikt bibliotek bygget med goquery. Men goquery er det raskere alternativet for å skrape nettsteder i Go.

Hva er goquery?

CSS-biblioteket, jQuery, bidro til å inspirere

instagram viewer
goquery. Det er et Go-bibliotek basert på net/html pakke, som implementerer en HTML5-kompatibel tokenizer og parser. Den bruker også Cascadia-pakken, som implementerer CSS-velgere for bruk med parseren levert av net/html.

Installerer goquery

Kjør kommandoen nedenfor i terminalen din for å installere goquery. Hvis du støter på feil, prøv å oppdatere Go-versjonen.

 skaff deg github.com/PuerkitoBio/goquery

Nettskrapingsprosessen

Du kan dele den overordnede skrapeprosessen inn i tre mindre oppgaver:

  1. Foreta HTTP-forespørsler.
  2. Bruk av velgere og lokatorer for å få de nødvendige dataene.
  3. Lagre data i en database eller datastrukturer for videre behandling.

Gjør HTTP-forespørsler i Go

Du kan sende HTTP-forespørsler ved å bruke net/http pakken, som Go-standardbiblioteket inkluderer.

pakke hoved-

import "net/http"
import "Logg"
import "fmt"

funchoved-() {
webUrl := "https://news.ycombinator.com/"
svar, feil:= http. Hent (weburl)

hvis feil != null {
Logg. Fatalln (feil)
} ellershvis respons. Statuskode == 200 {
fmt. Println("Vi kan skrape dette")
} ellers {
Logg. Fatalln("Ikke skrap dette")
}
}

http. Få returnerer en svartekst og en feil. respons. Statuskode er forespørsel-svar-statuskoden.

Ved å lage HTTP-forespørsler, hvis svarstatuskode er 200 du kan fortsette å skrape nettsiden.

Få de nødvendige dataene ved å bruke goquery

Få nettsidens HTML

Først må du analysere vanlig HTML fra svaret (response.body) for å få et komplett dokumentobjekt som representerer nettsiden:

dokument, feil := goquery. NewDocumentFromReader (respons. Kropp)

hvis feil != null {
Logg. Fatalln (feil)
}

Du kan nå bruke dokumentobjektet for å få tilgang til strukturen og innholdet nettsiden inneholder.

Velge nødvendige elementer fra HTML-en

Du må inspisere nettsiden for å sjekke strukturen til dataene du trenger å trekke ut. Dette vil hjelpe deg å konstruere en velger for å få tilgang til den.

Ved å bruke velgere og lokatorer kan du trekke ut HTML-en du trenger ved å bruke Finne metoden til dokumentobjektet.

De Finne metoden tar en CSS-velger for å finne elementet som inneholder dataene du trenger:

dokument. Finn("tr.athing")

Koden ovenfor returnerer bare det første HTML-elementet som samsvarer med velgeren, eller en tom liste hvis det ikke var samsvar i det hele tatt.

Velge flere elementer fra HTML

Mesteparten av tiden vil du hente alle HTML-elementene som samsvarer med velgeren din.

Du kan velge alle samsvarende elementer i HTML-en ved å bruke Hver metode for verdien som Finne() returnerer. De Hver metoden tar inn en funksjon med to parametere: en indeks og en velger av typen *goquery. Utvalg.

dokument. Finn("tr.athing").Hver(func(indeks int, velger *goquery. utvalg) {
/* Prosessvelger her */
})

I funksjonsteksten kan du velge de spesifikke dataene du ønsker fra HTML-en. I dette tilfellet trenger du koblingene og titlene til hvert innlegg siden viser. Bruke Finne metoden til velgerparameteren for å begrense settet med elementer og trekke ut tekst- eller attributtverdier.

dokument. Finn("tr.athing").Hver(func(indeks int, velger *goquery. utvalg) {
tittel := velger. Finn("td.title").Tekst()
lenke, funnet := velger. Find("a.titlelink").Attr("href")
})

Koden ovenfor kaller Tekst metode for resultatet fra velger. Finne for å trekke ut innholdet i en tabellcelle. Valg av attributter – som lenke- og bilde-URL-er – krever at du bruker Attr metode. Denne metoden returnerer også en verdi som indikerer om attributtet eksisterer i det hele tatt.

Prosessen er den samme for å velge hvilke elementer og attributter fra en nettside.

De Finne metoden er veldig kraftig, og lar et bredt spekter av operasjoner velge og finne HTML-elementer. Du kan utforske disse i goquery-dokumentasjonen.

Lagre de skrapte dataene

Koblingsattributtet og tittelen er strenger som du kan tilordne variabler. I virkelige scenarier vil du lagre til en database eller en datastruktur for manipulering. Ofte vil en enkel tilpasset struktur være tilstrekkelig.

Lag en struktur med felt tittel og lenke og et stykke strukturer for å holde strukturtypen.

type Informasjon struktur {
link streng
tittel streng
}
info := gjøre([]Informasjon, 0)

Når du har opprettet strukturen og snittet, i brødteksten til dokumentmetodefunksjonen, fyller du snittet i funksjonen du sender til Finn-metoden. Bruk struct-typen til å instansiere nye datastrukturer, som hver inneholder ett resultat.

info = legge til(info, informasjon{
tittel: tittel,
lenke: lenke,
})

Dette legger til typer Informasjon(strukturen) til info(skiven) hvorfra du kan manipulere dataene som du vil.

Utskrift av skiven viser at du har skrapet nettsiden og fylt ut skiven.

fmt. Println (info)

Det er rimelig å lagre de skrapte dataene i en lokal cache slik at du ikke treffer serveren til nettsiden mer enn du trenger. Dette vil ikke bare redusere trafikken, men øke hastigheten på appen din siden det er raskere å hente lokale data enn det er å sende forespørsler og skrape nettsider.

Det er mange databasepakker i Go som du kan bruke til å lagre dataene. De database/sql pakken støtter SQL-databaser. Det er også NoSQL-databaseklienter som MongoDB Go-driver, og serverløse databaser som FaunaDB som bruker FaunaDB driver.

Essensen av nettskraping i farten

Hvis du prøver å skrape data fra et nettsted, er goquery et utmerket sted å begynne. Men det er en kraftig pakke som kan gjøre mer enn bare nettskraping. Du kan finne ut mer om funksjonaliteten i den offisielle prosjektdokumentasjonen.

Nettskraping er en viktig ferdighet på tvers av ulike teknologifelt, og det vil komme godt med under mange av prosjektene dine.

Hvordan implementere objektorienterte programmeringskonsepter i Go

Les Neste

DelekvitringDeleE-post

Relaterte temaer

  • Programmering
  • Webutvikling
  • Programmering

Om forfatteren

Ukeje Chukwuemeriwo Godhet (3 artikler publisert)

Goodness er en teknisk skribent, backend-utvikler og dataanalytiker, og forenkler ulike teknologiemner mens han utforsker dette fascinerende feltet.

Mer fra Ukeje Chukwuemeriwo Godhet

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis e-bøker og eksklusive tilbud!

Klikk her for å abonnere