Spletno strganje, znano tudi kot pridobivanje spletnih podatkov, je avtomatizirana metoda pridobivanja podatkov ali vsebine s spletnih strani.
Spletna strgala avtomatizirajo pridobivanje podatkov brez človekovega vmešavanja. Strgalo dostopa do spletne strani s pošiljanjem zahtev HTTP, podobno kot spletni brskalnik. Vendar namesto prikaza HTML-ja, ki ga pridobi, ga obdela v skladu z vašimi navodili in shrani rezultat.
Spletna strgala so priročna za pridobivanje podatkov s spletnih mest, ki ne ponujajo API-jev. Priljubljeni so na področjih, kot so podatkovna znanost, kibernetska varnost, frontend in razvoj ozadja.
Spletno strganje v Go
V Go obstajajo različni paketi za spletno strganje. Med priljubljene so goquery, Colly in ChromeDP.
ChromeDP je paket spletnih gonilnikov, podoben selenu. Podpira protokol Chromovih orodij za razvijalce v Go brez odvisnosti.
Colly je knjižnica, specifična za spletno strganje, zgrajena z uporabo goqueryja. Toda goquery je hitrejša možnost za strganje spletnih mest v Go.
Kaj je goquery?
Knjižnica CSS, jQuery, je pomagala pri navdihu goquery. To je knjižnica Go, ki temelji na net/html paket, ki implementira tokenizer in razčlenjevalnik, združljiv s HTML5. Uporablja tudi paket Cascadia, ki implementira selektorje CSS za uporabo z razčlenjevalnikom, ki ga zagotavlja net/html.
Namestitev goqueryja
Zaženite spodnji ukaz v terminalu, da namestite goquery. Če naletite na kakršne koli napake, poskusite posodobiti različico Go.
pojdi pridobite github.com/PuerkitoBio/goquery
Postopek spletnega strganja
Celoten postopek strganja lahko razdelite na tri manjše naloge:
- Izdelava zahtev HTTP.
- Uporaba izbirnikov in lokatorjev da dobite zahtevane podatke.
- Shranjevanje podatkov v bazo podatkov ali podatkovne strukture za nadaljnjo obdelavo.
Izdelava zahtev HTTP v Go
Zahteve HTTP lahko pošljete z uporabo net/http paket, ki ga vključuje standardna knjižnica Go.
paket glavni
uvoz "net/http"
uvoz "dnevnik"
uvoz "fmt"funcglavni() {
webUrl := "https://news.ycombinator.com/"
odgovor, napaka:= http. Pridobi (webUrl)
če napaka!= nič {
dnevnik. Fatalln (napaka)
} drugoče odgovor. StatusCode == 200 {
fmt. Println("To lahko postrgamo")
} drugo {
dnevnik. Fatalln("Ne strgaj tega")
}
}
http Pridobite vrne telo odziva in napako. odgovor. StatusCode je statusna koda zahteva-odgovor.
Pri izdelavi zahtev HTTP, če je koda stanja odgovora je 200 lahko nadaljujete s strganjem spletnega mesta.
Pridobivanje zahtevanih podatkov z uporabo goquery
Pridobivanje HTML spletnega mesta
Najprej morate razčleniti navaden HTML iz odgovora (odziv.telo), da dobite celoten predmet dokumenta, ki predstavlja spletno stran:
dokument, err := goquery. NewDocumentFromReader (odziv. telo)
če napaka!= nič {
dnevnik. Fatalln (napaka)
}
Zdaj lahko uporabite predmet dokumenta za dostop do strukture in vsebine, ki jo vsebuje spletna stran.
Izbira zahtevanih elementov iz HTML-ja
Pregledati boste morali spletno stran, da preverite strukturo podatkov, ki jih morate ekstrahirati. To vam bo pomagalo sestaviti izbirnik za dostop do njega.
Z uporabo izbirnikov in lokatorjev lahko ekstrahirate HTML, ki ga potrebujete, z uporabo Najti metodo predmeta dokumenta.
The Najti metoda vzame izbirnik CSS, da poišče element, ki vsebuje podatke, ki jih potrebujete:
dokument. Najdi("tr.athing")
Zgornja koda vrne samo prvi element HTML, ki se ujema z izbirnikom, ali prazen seznam, če ujemanja sploh ni bilo.
Izbira več elementov iz HTML
Večino časa boste želeli pridobiti vse elemente HTML, ki se ujemajo z vašim izbirnikom.
Vse ujemajoče se elemente v HTML-ju lahko izberete s pomočjo Vsak metoda vrednosti, ki Najti() vrne. The Vsak metoda prevzame funkcijo z dvema parametroma: indeksom in izbirnikom tipa *goquery. Izbor.
dokument. Najdi("tr.athing").Each(func(indeks int, izbirnik *goquery. izbor) {
/* Izbirnik procesa tukaj */
})
V telesu funkcije lahko izberete določene podatke, ki jih želite iz HTML-ja. V tem primeru potrebujete povezave in naslove vsake objave na strani. Uporabi Najti metoda izbirnega parametra, da zoži nabor elementov in izvleče besedilo ali vrednosti atributov.
dokument. Najdi("tr.athing").Each(func(indeks int, izbirnik *goquery. izbor) {
naslov := izbirnik. Najdi("td.title").Besedilo()
povezava, najdena := izbirnik. Find("a.titlelink").Attr("href")
})
Zgornja koda kliče Besedilo metoda rezultata iz izbirnik. Najti za ekstrakcijo vsebine celice tabele. Če izberete atribute, kot so URL-ji povezav in slik, morate uporabiti Attr metoda. Ta metoda vrne tudi vrednost, ki označuje, ali atribut sploh obstaja.
Postopek je enak za izbiro vseh elementov in atributov s spletne strani.
The Najti Metoda je zelo zmogljiva, saj omogoča širok nabor operacij za izbiro in lociranje elementov HTML. Te lahko raziščete v dokumentaciji goquery.
Shranjevanje postrganih podatkov
Atribut povezave in naslov sta niza, ki ju lahko dodelite spremenljivkam. V resničnih scenarijih boste shranili v bazo podatkov ali podatkovno strukturo za manipulacijo. Pogosto bo zadostovala preprosta struktura po meri.
Ustvarite strukturo s polji naslov in povezava ter rezino struktur za shranjevanje tipa strukture.
tip Informacije struct {
povezava vrvica
naslov vrvica
}
info := narediti([]Informacije, 0)
Ko ustvarite strukturo in rezino, v telesu funkcije metode dokumenta zapolnite rezino v funkciji, ki jo posredujete metodi Find. Uporabite tip strukture za ustvarjanje novih podatkovnih struktur, od katerih vsaka vsebuje en rezultat.
info = dodaj(informacije, informacije{
naslov: naslov,
povezava: povezava,
})
To doda vrste Informacije(struktura) na info(rezina), iz katere lahko manipulirate s podatki, kot želite.
Tiskanje rezine kaže, da ste spletno stran uspešno postrgali in rezino zapolnili.
fmt. Println (informacije)
Smiselno je, da postrgane podatke shranite v lokalni predpomnilnik, tako da ne zadenete strežnika spletne strani bolj, kot je potrebno. To ne bo le zmanjšalo prometa, ampak tudi pospešilo vašo aplikacijo, saj je hitrejše pridobivanje lokalnih podatkov kot zahtevanje in brskanje po spletnih mestih.
V Go je veliko paketov baz podatkov, ki jih lahko uporabite za shranjevanje podatkov. The baza podatkov/sql paket podpira baze podatkov SQL. Obstajajo tudi odjemalci baz podatkov NoSQL, kot je Gonilnik MongoDB Go, in brezstrežniške baze podatkov, kot je FaunaDB, ki uporabljajo Gonilnik FaunaDB.
Bistvo spletnega strganja v Go
Če poskušate postrgati podatke s spletnega mesta, je goquery odličen kraj za začetek. Toda to je zmogljiv paket, ki lahko naredi več kot le spletno strganje. Več o njegovih funkcionalnostih lahko izveste v uradni projektni dokumentaciji.
Spletno strganje je pomembna veščina na različnih tehnoloških področjih in vam bo prišla prav pri številnih vaših projektih.
Kako implementirati koncepte objektno usmerjenega programiranja v Go
Preberite Naprej
Povezane teme
- Programiranje
- Spletni razvoj
- Programiranje
O avtorju
Goodness je tehnični pisatelj, razvijalec zaledja in analitik podatkov, ki poenostavlja različne tehnološke teme, ko raziskuje to fascinantno področje.
Naročite se na naše novice
Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e-knjige in ekskluzivne ponudbe!
Kliknite tukaj, da se naročite