Web-kaappaus, joka tunnetaan myös nimellä verkkotietojen purkaminen, on automaattinen menetelmä tietojen tai sisällön poimimiseen verkkosivuilta.

Verkkokaapimet automatisoivat tietojen poiminnan ilman ihmisen puuttumista. Kaavin käyttää verkkosivua lähettämällä HTTP-pyyntöjä, aivan kuten verkkoselain. Sen sijaan, että se näyttäisi hakemaansa HTML-koodia, se käsittelee sen ohjeidesi mukaan ja tallentaa tuloksen.

Verkkokaapimet ovat hyödyllisiä haettaessa tietoja verkkosivustoilta, jotka eivät tarjoa API: ita. Ne ovat suosittuja aloilla, kuten datatiede, kyberturvallisuus, käyttöliittymä ja taustakehitys.

Verkkokaappaus Gossa

Gossa on erilaisia ​​web-kaappauspaketteja. Suosittuja ovat goquery, Colly ja ChromeDP.

ChromeDP on seleeniä muistuttava verkkoohjainpaketti. Se tukee Chromen kehittäjätyökalujen protokollaa Gossa ilman riippuvuuksia.

Colly on web-kaappauskohtainen kirjasto, joka on rakennettu goquerylla. Mutta goquery on nopeampi vaihtoehto verkkosivustojen kaappaamiseen Gossa.

Mikä on goquery?

CSS-kirjasto, jQuery, auttoi inspiroimaan goquery. Se on Go-kirjasto, joka perustuu net/html paketti, joka toteuttaa HTML5-yhteensopivan tokenisaattorin ja jäsentimen. Se käyttää myös Cascadia-pakettia, joka toteuttaa CSS-valitsimia käytettäväksi net/html: n tarjoaman jäsentimen kanssa.

Goqueryn asennus

Asenna goquery suorittamalla alla oleva komento päätteessäsi. Jos kohtaat virheitä, yritä päivittää Go-versiosi.

mennä hanki github.com/PuerkitoBio/goquery

Web-kaappausprosessi

Voit jakaa kokonaisen kaavintaprosessin kolmeen pienempään tehtävään:

  1. HTTP-pyyntöjen tekeminen.
  2. Valitsimien ja paikantimien käyttäminen saadaksesi tarvittavat tiedot.
  3. Tietojen tallentaminen tietokantaan tai tietorakenteisiin jatkokäsittelyä varten.

HTTP-pyyntöjen tekeminen Gossa

Voit lähettää HTTP-pyyntöjä käyttämällä net/http paketti, jonka Go-standardikirjasto sisältää.

paketti pää

tuonti "net/http"
tuonti "Hirsi"
tuonti "fmt"

funcpää() {
webUrl := "https://news.ycombinator.com/"
vastaus, err:= http. Hanki (webUrl)

jos virhe! = nolla {
Hirsi. Fatalln (err)
} muujos vastaus. Tilakoodi == 200 {
fmt. Println("Voimme kaapia tämän")
} muu {
Hirsi. Fatalln ("Älä raaputa tätä")
}
}

http. Saada palauttaa vastauksen rungon ja virheen. vastaus. StatusCode on pyyntö-vastauksen tilakoodi.

HTTP-pyyntöjen tekemisessä, jos vastauksen tilakoodi On 200 voit jatkaa verkkosivuston kaapimista.

Vaadittujen tietojen hankkiminen goqueryn avulla

Verkkosivuston HTML: n hankkiminen

Ensin sinun on jäsennettävä vastauksesta (vastaus.body) saadaksesi verkkosivua edustavan täydellisen asiakirjaobjektin:

asiakirja, err := goquery. NewDocumentFromReader (vastaus. runko)

jos virhe! = nolla {
Hirsi. Fatalln (err)
}

Voit nyt käyttää dokumenttiobjektia verkkosivun rakenteeseen ja sisältöön.

Vaadittujen elementtien valitseminen HTML-koodista

Sinun on tarkastettava verkkosivu tarkistaaksesi poimittavien tietojen rakenteen. Tämä auttaa sinua rakentamaan valitsimen siihen pääsyä varten.

Valitsimien ja paikantimien avulla voit purkaa tarvitsemasi HTML-koodin käyttämällä löytö asiakirjaobjektin menetelmä.

The löytö menetelmä käyttää CSS-valitsimea löytääkseen elementin, joka sisältää tarvitsemasi tiedot:

asiakirja. Etsi("tr.athing")

Yllä oleva koodi palauttaa vain ensimmäisen valitsinta vastaavan HTML-elementin tai tyhjän luettelon, jos vastaavaa ei ollut ollenkaan.

Useiden elementtien valitseminen HTML: stä

Useimmiten haluat hakea kaikki valitsinta vastaavat HTML-elementit.

Voit valita kaikki vastaavat elementit HTML: stä käyttämällä Jokainen arvon menetelmä Löytö() palaa. The Jokainen menetelmä ottaa funktion, jossa on kaksi parametria: indeksi ja valitsin, jonka tyyppi on *goquery. Valinta.

asiakirja. Find("tr.athing").Each(func(indeksi int, valitsin *goquery. Valinta) {
/* Prosessin valitsin täällä */
})

Funktiotekstissä voit valita haluamasi tiedot HTML-koodista. Tässä tapauksessa tarvitset linkit ja otsikot jokaiseen sivuluetteloon kuuluvaan viestiin. Käytä löytö valintaparametrin menetelmä kaventaa elementtijoukkoa ja poimia tekstiä tai attribuuttiarvoja.

asiakirja. Find("tr.athing").Each(func(indeksi int, valitsin *goquery. Valinta) {
otsikko := valitsin. Etsi("td.title").Teksti()
linkki, löytyi := valitsin. Find("a.titlelink").Attr("href")
})

Yllä oleva koodi kutsuu Teksti tuloksen menetelmä valitsin. löytö poimimaan taulukon solun sisällön. Attribuuttien, kuten linkkien ja kuvien URL-osoitteiden, valitseminen edellyttää, että käytät Attr menetelmä. Tämä menetelmä palauttaa myös arvon, joka osoittaa, onko määrite olemassa ollenkaan.

Prosessi on sama mitä tahansa web-sivun elementtien ja attribuuttien valinnassa.

The löytö menetelmä on erittäin tehokas, mikä mahdollistaa laajan valikoiman toimintoja HTML-elementtien valitsemiseksi ja paikantamiseksi. Voit tutustua näihin goquery-dokumentaatiossa.

Koputtujen tietojen tallentaminen

Link-attribuutti ja otsikko ovat merkkijonoja, jotka voit määrittää muuttujiin. Todellisissa skenaarioissa tallennat tietokantaan tai tietorakenteeseen manipulointia varten. Usein yksinkertainen mukautettu rakenne riittää.

Luo rakenne kentillä otsikko ja linkki sekä osa rakenteita struct-tyypin säilyttämiseksi.

tyyppi Tiedot struct {
linkki merkkijono
otsikko merkkijono
}
infoa := tehdä([]Tiedot, 0)

Kun olet luonut rakenteen ja viipaleen, täytä osio funktiossa, jonka siirrät Etsi-menetelmälle. Käytä rakennetyyppiä luodaksesi uusia tietorakenteita, joista jokainen sisältää yhden tuloksen.

info = liittää(tiedot, tiedot{
otsikko: otsikko,
linkki: linkki,
})

Tämä liittää tyyppejä Tiedot(rakenne) kohtaan tiedot(viipale), josta voit muokata tietoja haluamallasi tavalla.

Osion tulostaminen osoittaa, että olet onnistuneesti kaavinnut verkkosivuston ja täyttänyt osion.

fmt. Println (tiedot)

Kaavitut tiedot on järkevää tallentaa paikalliseen välimuistiin, jotta et törmää verkkosivun palvelimeen enempää kuin on tarpeen. Tämä ei vain vähennä liikennettä, vaan nopeuttaa sovellustasi, koska se on nopeampi hakea paikallisia tietoja kuin tehdä pyyntöjä ja raapia verkkosivustoja.

Gossa on monia tietokantapaketteja, joita voit käyttää tietojen tallentamiseen. The tietokanta/sql paketti tukee SQL-tietokantoja. On myös NoSQL-tietokanta-asiakkaita, kuten MongoDB Go -ohjainja palvelimettomat tietokannat, kuten FaunaDB, jotka käyttävät FaunaDB ajuri.

Web-kaappauksen ydin Gossa

Jos yrität kaapata tietoja verkkosivustolta, goquery on erinomainen paikka aloittaa. Mutta se on tehokas paketti, joka voi tehdä muutakin kuin pelkän verkon kaapimisen. Saat lisätietoja sen toiminnoista virallisesta projektidokumentaatiosta.

Web-kaappaus on tärkeä taito useilla tekniikan aloilla ja siitä on hyötyä monissa projekteissasi.

Olio-ohjelmointikonseptien toteuttaminen Gossa

Lue Seuraava

JaaTweetJaaSähköposti

Liittyvät aiheet

  • Ohjelmointi
  • Verkkokehitys
  • Ohjelmointi

Kirjailijasta

Ukeje Chukwuemeriwo hyvyys (3 artikkelia julkaistu)

Goodness on tekninen kirjoittaja, taustakehittäjä ja data-analyytikko, joka yksinkertaistaa erilaisia ​​teknologia-aiheita tutkiessaan tätä kiehtovaa alaa.

Lisää Ukeje Chukwuemeriwo Goodnessilta

tilaa uutiskirjeemme

Liity uutiskirjeemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e-kirjoja ja eksklusiivisia tarjouksia!

Klikkaa tästä tilataksesi