Webbskrapning, även känd som webbdataextraktion, är en automatiserad metod för att extrahera data eller innehåll från webbsidor.

Webskrapor automatiserar datautvinning utan mänsklig inblandning. En skrapa kommer åt en webbsida genom att skicka HTTP-förfrågningar, ungefär som en webbläsare gör. Men istället för att visa HTML-koden som den hämtar, bearbetar den den enligt dina instruktioner och lagrar resultatet.

Webbskrapor är praktiska för att hämta data från webbplatser som inte tillhandahåller API: er. De är populära inom områden som datavetenskap, cybersäkerhet, frontend och backend-utveckling.

Web Scraping in Go

I Go finns olika webbskrapningspaket. De populäraste inkluderar goquery, Colly och ChromeDP.

ChromeDP är ett selenliknande webbdrivrutinspaket. Det stöder Chrome Developer Tools-protokollet i Go utan beroenden.

Colly är ett webbskrapningsspecifikt bibliotek byggt med goquery. Men goquery är det snabbare alternativet för att skrapa webbplatser i Go.

Vad är goquery?

CSS-biblioteket, jQuery, hjälpte till att inspirera

instagram viewer
goquery. Det är ett Go-bibliotek baserat på net/html paket, som implementerar en HTML5-kompatibel tokenizer och parser. Den använder också Cascadia-paketet, som implementerar CSS-väljare för användning med parsern som tillhandahålls av net/html.

Installerar goquery

Kör kommandot nedan i din terminal för att installera goquery. Om du stöter på några fel, försök att uppdatera din Go-version.

 hämta github.com/PuerkitoBio/goquery

Webbskrapningsprocessen

Du kan dela upp den övergripande skrapningsprocessen i tre mindre uppgifter:

  1. Gör HTTP-förfrågningar.
  2. Använda väljare och lokaliserare för att få de nödvändiga uppgifterna.
  3. Spara data i en databas eller datastrukturer för vidare bearbetning.

Gör HTTP-förfrågningar i Go

Du kan skicka HTTP-förfrågningar med hjälp av net/http paket, som Go-standardbiblioteket inkluderar.

paket huvud

importera "net/http"
importera "logga"
importera "fmt"

funchuvud() {
weburl := "https://news.ycombinator.com/"
svar, err:= http. Hämta (weburl)

om fel!= noll {
logga. Fatalln (fel)
} annanom svar. Statuskod == 200 {
fmt. Println("Vi kan skrapa detta")
} annan {
logga. Fatalln("skrapa inte detta")
}
}

http. Skaffa sig returnerar en svarstext och ett fel. svar. Statuskod är statuskoden för begäran-svar.

När du gör HTTP-förfrågningar, om svarsstatuskod är 200 du kan fortsätta att skrapa webbplatsen.

Få de nödvändiga uppgifterna med hjälp av goquery

Få webbplatsens HTML

Först måste du analysera den vanliga HTML-koden från svaret (response.body) för att få ett komplett dokumentobjekt som representerar webbsidan:

dokument, err := goquery. NewDocumentFromReader (svar. Kropp)

om fel!= noll {
logga. Fatalln (fel)
}

Du kan nu använda dokumentobjektet för att komma åt strukturen och innehållet som webbsidan innehåller.

Välja nödvändiga element från HTML

Du måste inspektera webbsidan för att kontrollera strukturen för de data du behöver extrahera. Detta hjälper dig att konstruera en väljare för att komma åt den.

Med hjälp av väljare och lokaliserare kan du extrahera HTML-koden du behöver med hjälp av Hitta metod för dokumentobjektet.

De Hitta Metoden tar en CSS-väljare för att lokalisera elementet som innehåller den data du behöver:

dokumentera. Find("tr.athing")

Koden ovan returnerar endast det första HTML-elementet som matchar väljaren, eller en tom lista om det inte fanns en matchning alls.

Välja flera element från HTML

För det mesta vill du hämta alla HTML-element som matchar din väljare.

Du kan välja alla matchande element i HTML-koden med hjälp av Varje metod för värdet som Hitta() returnerar. De Varje metoden tar in en funktion med två parametrar: ett index och en väljare av typen *goquery. Urval.

dokumentera. Find("tr.athing").Each(func(index int, väljare *goquery. Urval) {
/* Processväljare här */
})

I funktionskroppen kan du välja den specifika data du vill ha från HTML-koden. I det här fallet behöver du länkarna och rubrikerna för varje inlägg som sidan listar. Använd Hitta metod för väljarparametern för att begränsa uppsättningen element och extrahera text- eller attributvärden.

dokumentera. Find("tr.athing").Each(func(index int, väljare *goquery. Urval) {
titel := väljare. Find("td.title").Text()
länk, hittade := väljare. Find("a.titlelink").Attr("href")
})

Koden ovan kallar Text metod för resultatet från väljare. Hitta för att extrahera innehållet i en tabellcell. Att välja attribut – som länk- och bildwebbadresser – kräver att du använder Attr metod. Denna metod returnerar också ett värde som anger om attributet överhuvudtaget finns.

Processen är densamma för att välja vilka element och attribut som helst från en webbsida.

De Hitta Metoden är mycket kraftfull och tillåter ett brett utbud av operationer för att välja och lokalisera HTML-element. Du kan utforska dessa i goquery-dokumentationen.

Spara skrapade data

Länkattributet och titeln är strängar som du kan tilldela variabler. I verkliga scenarier kommer du att spara till en databas eller en datastruktur för manipulation. Ofta räcker det med en enkel anpassad struktur.

Skapa en struktur med fält titel och länk och en del av strukturer för att hålla strukturtypen.

typ Information struktur {
länk sträng
titel sträng
}
info := göra([]Information, 0)

När du har skapat strukturen och segmentet, i brödtexten i dokumentmetodfunktionen, fyller du segmentet i funktionen du skickar till sökmetoden. Använd struct-typen för att instansiera nya datastrukturer, som var och en innehåller ett resultat.

info = bifoga(info, information{
titel: titel,
länk: länk,
})

Detta lägger till typer av Information(strukturen) till info(skivan) från vilken du kan manipulera data som du vill.

Att skriva ut skivan visar att du framgångsrikt har skrapat webbplatsen och fyllt i skivan.

fmt. Println (info)

Det är rimligt att spara den skrapade datan i en lokal cache så att du inte träffar webbsidans server mer än du behöver. Detta kommer inte bara att minska trafiken utan påskynda din app eftersom det är snabbare att hämta lokal data än att göra förfrågningar och skrapa webbplatser.

Det finns många databaspaket i Go som du kan använda för att spara data. De databas/sql paketet stöder SQL-databaser. Det finns också NoSQL-databasklienter som Drivrutinen för MongoDB Go, och serverlösa databaser som FaunaDB som använder FaunaDB drivrutinen.

Essensen av webbskrapning i farten

Om du försöker skrapa data från en webbplats är goquery ett utmärkt ställe att börja. Men det är ett kraftfullt paket som kan göra mer än bara webbskrapa. Du kan ta reda på mer om dess funktionalitet i den officiella projektdokumentationen.

Webbskrapning är en viktig färdighet inom olika teknikområden och den kommer väl till pass under många av dina projekt.

Hur man implementerar objektorienterade programmeringskoncept i Go

Läs Nästa

Dela med sigTweetDela med sigE-post

Relaterade ämnen

  • Programmering
  • Webbutveckling
  • Programmering

Om författaren

Ukeje Chukwuemeriwo Godhet (3 publicerade artiklar)

Goodness är en teknisk skribent, backend-utvecklare och dataanalytiker, som förenklar olika teknikämnen när han utforskar detta fascinerande område.

Mer från Ukeje Chukwuemeriwo Goodness

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!

Klicka här för att prenumerera