Il web scraping, noto anche come estrazione di dati web, è un metodo automatizzato per estrarre dati o contenuti dalle pagine web.

I web scraper automatizzano l'estrazione dei dati senza interferenze umane. Uno scraper accede a una pagina Web inviando richieste HTTP, proprio come fa un browser Web. Tuttavia, invece di visualizzare l'HTML che recupera, lo elabora secondo le tue istruzioni e memorizza il risultato.

Gli scraper Web sono utili per recuperare dati da siti Web che non forniscono API. Sono popolari in campi come la scienza dei dati, la sicurezza informatica, lo sviluppo di front-end e back-end.

Web scraping in Go

In Go, ci sono vari pacchetti di web scraping. I più popolari includono goquery, Colly e ChromeDP.

ChromeDP è un pacchetto di driver web simile al selenio. Supporta il protocollo degli strumenti per sviluppatori di Chrome in Go senza dipendenze.

Colly è una libreria specifica per il web scraping creata utilizzando goquery. Ma goquery è l'opzione più veloce per lo scraping di siti Web in Go.

instagram viewer

Cos'è Goquery?

La libreria CSS, jQuery, ha contribuito a ispirare goquery. È una libreria Go basata su netto/html pacchetto, che implementa un tokenizzatore e un parser conforme a HTML5. Utilizza anche il pacchetto Cascadia, che implementa i selettori CSS da utilizzare con il parser fornito da net/html.

Installazione di goquery

Esegui il comando seguente nel tuo terminale per installare goquery. Se riscontri errori, prova ad aggiornare la tua versione Go.

andare ottenere github.com/PuerkitoBio/goquery

Il processo di web scraping

Puoi dividere l'intero processo di scraping in tre attività più piccole:

  1. Fare richieste HTTP.
  2. Utilizzo di selettori e localizzatori per ottenere i dati richiesti.
  3. Salvataggio di dati in un database o strutture di dati per ulteriori elaborazioni.

Fare richieste HTTP in Go

Puoi inviare richieste HTTP utilizzando il file rete/http pacchetto, che include la libreria standard Go.

pacchetto principale

importare "rete/http"
importare "tronco d'albero"
importare "fmt"

funzprincipale() {
URL web := "https://news.ycombinator.com/"
risposta, err:= http. Ottieni (URL web)

Se ehm!= zero {
tronco d'albero. Fatalln (err)
} altroSe risposta. Codice di stato == 200 {
fmt. Println("Possiamo raschiare questo")
} altro {
tronco d'albero. Fatalln("Non raschiare questo")
}
}

http. Ottenere restituisce un corpo di risposta e un errore. risposta. Codice di stato è il codice di stato della richiesta-risposta.

Quando si effettuano richieste HTTP, se il codice di stato della risposta è 200 puoi procedere a raschiare il sito web.

Ottenere i dati richiesti utilizzando goquery

Ottenere l'HTML del sito web

Innanzitutto, devi analizzare il semplice HTML dalla risposta (risposta.corpo) per ottenere un oggetto documento completo che rappresenti la pagina web:

documento, err := goquery. NewDocumentFromReader (risposta. Corpo)

Se ehm!= zero {
tronco d'albero. Fatalln (err)
}

È ora possibile utilizzare l'oggetto documento per accedere alla struttura e al contenuto della pagina Web.

Selezione degli elementi richiesti dall'HTML

Dovrai ispezionare la pagina web per verificare la struttura dei dati che devi estrarre. Questo ti aiuterà a costruire un selettore per accedervi.

Usando selettori e locator, puoi estrarre l'HTML di cui hai bisogno usando il file Trova metodo dell'oggetto documento.

Il Trova richiede un selettore CSS per individuare l'elemento che contiene i dati richiesti:

documento. Trova("tr.thing")

Il codice sopra restituisce solo il primo elemento HTML che corrisponde al selettore o un elenco vuoto se non c'è stata alcuna corrispondenza.

Selezione di più elementi da HTML

La maggior parte delle volte, vorrai recuperare tutti gli elementi HTML che corrispondono al tuo selettore.

Puoi selezionare tutti gli elementi corrispondenti nell'HTML usando il Ogni metodo del valore che Trova() ritorna. Il Ogni il metodo accetta una funzione con due parametri: un indice e un selettore di tipo *goquery. Selezione.

documento. Find("tr.thing").Each(funz(indice int, selettore *goquery. Selezione) {
/* Selettore di processo qui */
})

Nel corpo della funzione è possibile selezionare i dati specifici desiderati dall'HTML. In questo caso, hai bisogno dei link e dei titoli di ogni post che la pagina elenca. Usa il Trova metodo del parametro selector per restringere l'insieme di elementi ed estrarre testo o valori di attributo.

documento. Find("tr.thing").Each(funz(indice int, selettore *goquery. Selezione) {
titolo := selettore. Find("td.title").Testo()
link, trovato := selettore. Find("a.titlelink").Attr("href")
})

Il codice sopra chiama il Testo metodo del risultato da selettore. Trova per estrarre il contenuto di una cella di tabella. La selezione di attributi, come link e URL di immagini, richiede l'utilizzo di Attr metodo. Questo metodo restituisce anche un valore che indica se l'attributo esiste.

Il processo è lo stesso per selezionare qualsiasi elemento e attributo da una pagina web.

Il Trova metodo è molto potente, consentendo un'ampia gamma di operazioni per selezionare e localizzare elementi HTML. Puoi esplorarli nella documentazione di goquery.

Salvataggio dei dati raschiati

L'attributo link e il titolo sono stringhe che puoi assegnare alle variabili. In scenari reali, salverai in un database o in una struttura di dati per la manipolazione. Spesso è sufficiente una semplice struttura personalizzata.

Crea una struttura con i campi title e link e una porzione di struct per contenere il tipo di struct.

genere Informazione struttura {
collegamento corda
titolo corda
}
informazioni := rendere([]Informazione, 0)

Dopo aver creato la struttura e la sezione, nel corpo della funzione del metodo del documento, popolare la sezione nella funzione che si passa al metodo Find. Utilizzare il tipo struct per creare un'istanza di nuove strutture di dati, ciascuna contenente un risultato.

informazioni = aggiungere(informazioni, informazioni{
titolo: titolo,
collegamento: collegamento,
})

Questo aggiunge tipi di Informazione(la struttura) al Informazioni(la fetta) da cui puoi manipolare i dati a tuo piacimento.

La stampa della sezione mostra che hai raschiato correttamente il sito Web e popolato la sezione.

fmt. Stampa (informazioni)

È ragionevole salvare i dati raschiati in una cache locale in modo da non raggiungere il server della pagina Web più del necessario. Ciò non solo ridurrà il traffico, ma accelererà la tua app poiché è più veloce recuperare i dati locali piuttosto che effettuare richieste e raschiare i siti Web.

Ci sono molti pacchetti di database in Go che puoi usare per salvare i dati. Il database/ql il pacchetto supporta i database SQL. Esistono anche client di database NoSQL come il Driver MongoDB Vaie database serverless come FaunaDB che utilizzano Driver FaunaDB.

L'essenza del web scraping in Go

Se stai cercando di acquisire dati da un sito Web, goquery è un ottimo punto di partenza. Ma è un pacchetto potente che può fare molto di più del semplice web scraping. Puoi scoprire di più sulle sue funzionalità nella documentazione ufficiale del progetto.

Il web scraping è un'abilità importante in vari campi tecnologici e tornerà utile durante molti dei tuoi progetti.

Come implementare concetti di programmazione orientata agli oggetti in Go

Leggi Avanti

CondividereTwittaCondividereE-mail

Argomenti correlati

  • Programmazione
  • Sviluppo web
  • Programmazione

Circa l'autore

Ukeje Chukwuemeriwo Bontà (3 articoli pubblicati)

Goodness è uno scrittore tecnico, uno sviluppatore di back-end e un analista di dati, che semplifica vari argomenti tecnologici mentre esplora questo affascinante campo.

Altro da Ukeje Chukwuemeriwo Bontà

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per suggerimenti tecnici, recensioni, ebook gratuiti e offerte esclusive!

Clicca qui per iscriverti