Web scraping, također poznat kao ekstrakcija web podataka, automatizirana je metoda izdvajanja podataka ili sadržaja s web stranica.

Web strugači automatiziraju ekstrakciju podataka bez ljudskog uplitanja. Scraper pristupa web stranici slanjem HTTP zahtjeva, slično kao što to čini web preglednik. Međutim, umjesto da prikaže HTML koji dohvaća, on ga obrađuje prema vašim uputama i pohranjuje rezultat.

Web strugači su korisni za dohvaćanje podataka s web-mjesta koja ne pružaju API-je. Popularni su u područjima kao što su znanost o podacima, kibernetička sigurnost, frontend i razvoj pozadine.

Web Scraping u Go

U Gou postoje razni paketi za struganje weba. Popularne su goquery, Colly i ChromeDP.

ChromeDP je paket upravljačkih programa weba sličan selenu. Podržava protokol Chrome razvojnih alata u Go bez ovisnosti.

Colly je knjižnica specifična za struganje weba izgrađena pomoću goqueryja. No goquery je brža opcija za scraping web-mjesta u Go.

Što je goquery?

CSS biblioteka, jQuery, pomogla je inspirirati

instagram viewer
goquery. To je Go biblioteka koja se temelji na net/html paket, koji implementira tokenizer i parser usklađen s HTML5. Također koristi paket Cascadia, koji implementira CSS selektore za korištenje s parserom koji pruža net/html.

Instaliranje goqueryja

Pokrenite naredbu u nastavku u svom terminalu da instalirate goquery. Ako naiđete na pogreške, pokušajte ažurirati svoju verziju Go.

ići nabavite github.com/PuerkitoBio/goquery

Proces Web Scraping

Cjelokupni proces struganja možete podijeliti u tri manja zadatka:

  1. Izrada HTTP zahtjeva.
  2. Korištenje selektora i lokatora da dobijete tražene podatke.
  3. Spremanje podataka u bazu podataka ili strukture podataka za daljnju obradu.

Izrada HTTP zahtjeva u Go

Možete slati HTTP zahtjeve pomoću net/http paket koji uključuje Go standardna biblioteka.

paket glavni

uvoz "net/http"
uvoz "dnevnik"
uvoz "fmt"

funcglavni() {
webUrl := "https://news.ycombinator.com/"
odgovor, greška:= http. Nabavi (webUrl)

ako griješi!= nula {
zapisnik. Fatalln (err)
} drugoako odgovor. StatusCode == 200 {
fmt. Println("Možemo ovo ostrugati")
} drugo {
zapisnik. Fatalln("Nemoj strugati ovo")
}
}

http Dobiti vraća tijelo odgovora i grešku. odgovor. StatusCode je statusni kod zahtjev-odgovor.

Prilikom postavljanja HTTP zahtjeva, ako je kod statusa odgovora je 200 možete nastaviti strugati web stranicu.

Dohvaćanje potrebnih podataka pomoću goqueryja

Dobivanje HTML-a web-mjesta

Prvo, morate raščlaniti obični HTML iz odgovora (odgovor.tijelo) da biste dobili potpuni objekt dokumenta koji predstavlja web stranicu:

dokument, err := goquery. NewDocumentFromReader (odgovor. Tijelo)

ako griješi!= nula {
zapisnik. Fatalln (err)
}

Sada možete koristiti objekt dokumenta za pristup strukturi i sadržaju koji web stranica sadrži.

Odabir potrebnih elemenata iz HTML-a

Morat ćete pregledati web stranicu kako biste provjerili strukturu podataka koje trebate izdvojiti. To će vam pomoći da konstruirate selektor za pristup.

Koristeći selektore i lokatore, možete izdvojiti HTML koji vam je potreban pomoću Pronaći metoda objekta dokumenta.

The Pronaći metoda uzima CSS selektor da locira element koji sadrži podatke koji su vam potrebni:

dokument. Find("tr.athing")

Gornji kod vraća samo prvi HTML element koji odgovara selektoru ili prazan popis ako uopće nije bilo podudaranja.

Odabir više elemenata iz HTML-a

Većinu vremena poželjet ćete dohvatiti sve HTML elemente koji odgovaraju vašem selektoru.

Možete odabrati sve podudarne elemente u HTML-u pomoću Svaki metoda vrijednosti koja Pronaći() vraća. The Svaki metoda uzima funkciju s dva parametra: indeksom i selektorom tipa *goquery. Izbor.

dokument. Find("tr.athing").Svako(func(indeks int, selektor *goquery. Izbor) {
/* Ovdje birač procesa */
})

U tijelu funkcije možete odabrati određene podatke koje želite iz HTML-a. U ovom slučaju, potrebne su vam veze i naslovi svakog posta na stranici. Koristiti Pronaći metoda parametra selektora za sužavanje skupa elemenata i izdvajanje teksta ili vrijednosti atributa.

dokument. Find("tr.athing").Svako(func(indeks int, selektor *goquery. Izbor) {
naslov := selektor. Find("td.title").Text()
link, pronađen := selektor. Find("a.titlelink").Attr("href")
})

Gornji kod poziva Tekst metoda rezultata iz selektor. Pronaći za izdvajanje sadržaja ćelije tablice. Odabir atributa – poput URL-ova veze i slike – zahtijeva da koristite Attr metoda. Ova metoda također vraća vrijednost koja pokazuje postoji li atribut uopće.

Postupak je isti za odabir svih elemenata i atributa s web stranice.

The Pronaći Metoda je vrlo moćna, dopuštajući širok raspon operacija za odabir i lociranje HTML elemenata. Možete ih istražiti u goquery dokumentaciji.

Spremanje scraped podataka

Atribut veze i naslov su nizovi koje možete dodijeliti varijablama. U stvarnim scenarijima, spremat ćete u bazu podataka ili strukturu podataka radi manipulacije. Često će biti dovoljna jednostavna prilagođena struktura.

Napravite strukturu s poljima naslov i poveznica te dio struktura za držanje tipa strukture.

tip Informacija strukturirati {
veza niz
titula niz
}
info := napraviti([]Informacija, 0)

Nakon što ste stvorili strukturu i odsječak, u tijelu funkcije metode dokumenta popunite isječak u funkciji koju prosljeđujete metodi Find. Koristite tip strukture za instanciranje novih struktura podataka, od kojih svaka sadrži jedan rezultat.

info = dodati(info, informacije{
naslov: naslov,
link: link,
})

Ovo dodaje vrste Informacija(struktura) na info(odsječak) iz kojeg možete manipulirati podacima kako želite.

Ispis odsječka pokazuje da ste uspješno sgrebali web stranicu i popunili isječak.

fmt. Println (info)

Razumno je pohranjene podatke spremiti u lokalnu predmemoriju kako ne biste pogodili poslužitelj web stranice više nego što je potrebno. To ne samo da će smanjiti promet već i ubrzati vašu aplikaciju jer je brže dohvaćanje lokalnih podataka nego slanje zahtjeva i brisanje web-mjesta.

U Go postoji mnogo paketa baze podataka koje možete koristiti za spremanje podataka. The baza podataka/sql paket podržava SQL baze podataka. Postoje i NoSQL klijenti baze podataka poput MongoDB Go upravljački programi baze podataka bez poslužitelja poput FaunaDB koji koriste FaunaDB upravljački program.

Bit web scrapinga u Go

Ako pokušavate izvući podatke s web stranice, goquery je izvrsno mjesto za početak. Ali to je moćan paket koji može učiniti više od pukog struganja weba. Više o njegovoj funkcionalnosti možete saznati u službenoj projektnoj dokumentaciji.

Web scraping važna je vještina u različitim tehnološkim područjima i dobro će vam doći tijekom mnogih vaših projekata.

Kako implementirati koncepte objektno orijentiranog programiranja u Go

Pročitajte dalje

UdioCvrkutUdioE-mail

Povezane teme

  • Programiranje
  • Web razvoj
  • Programiranje

O autoru

Ukeje Chukwuemeriwo Goodness (Objavljena 3 članka)

Goodness je tehnički pisac, backend developer i analitičar podataka, koji pojednostavljuje različite tehnološke teme dok istražuje ovo fascinantno područje.

Više od Ukeje Chukwuemeriwo Goodness

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e-knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu