Web scraping, cunoscut și sub denumirea de extracție a datelor web, este o metodă automată de extragere a datelor sau a conținutului din paginile web.

Web scrapers automatizează extragerea datelor fără interferențe umane. Un scraper accesează o pagină web trimițând solicitări HTTP, la fel ca un browser web. Cu toate acestea, în loc să afișeze codul HTML pe care îl preia, îl procesează conform instrucțiunilor tale și stochează rezultatul.

Web scrapers sunt utile pentru preluarea datelor de pe site-uri web care nu oferă API-uri. Sunt populare în domenii precum știința datelor, securitatea cibernetică, dezvoltarea frontend și backend.

Web Scraping în Go

În Go, există diverse pachete de web scraping. Cele populare includ goquery, Colly și ChromeDP.

ChromeDP este un pachet de driver web asemănător seleniului. Acceptă protocolul instrumentelor pentru dezvoltatori Chrome în Go fără dependențe.

Colly este o bibliotecă specifică web scraping creată folosind goquery. Dar goquery este opțiunea mai rapidă pentru răzuirea site-urilor web în Go.

instagram viewer

Ce este goquery?

Biblioteca CSS, jQuery, a ajutat la inspirație goquery. Este o bibliotecă Go bazată pe net/html pachet, care implementează un tokenizer și un parser compatibil cu HTML5. De asemenea, folosește pachetul Cascadia, care implementează selectori CSS pentru utilizare cu parser-ul furnizat de net/html.

Instalarea goquery

Rulați comanda de mai jos în terminalul dvs. pentru a instala goquery. Dacă întâmpinați erori, încercați să actualizați versiunea Go.

merge obțineți github.com/PuerkitoBio/goquery

Procesul Web Scraping

Puteți împărți procesul general de răzuire în trei sarcini mai mici:

  1. Efectuarea de solicitări HTTP.
  2. Folosind selectoare și localizatoare pentru a obține datele necesare.
  3. Salvarea datelor într-o bază de date sau structuri de date pentru prelucrare ulterioară.

Efectuarea de solicitări HTTP în Go

Puteți trimite solicitări HTTP folosind net/http pachet, pe care îl include biblioteca standard Go.

pachet principal

import "net/http"
import "Buturuga"
import "fmt"

funcprincipal() {
webUrl := "https://news.ycombinator.com/"
răspuns, err:= http. Obține (webUrl)

dacă greseala != zero {
Buturuga. Fatalln (eră)
} altfeldacă raspuns. StatusCode == 200 {
fmt. Println(„Putem răzui acest lucru”)
} altfel {
Buturuga. Fatalln(„Nu răzuiți asta”)
}
}

http. obține returnează un corp de răspuns și o eroare. raspuns. StatusCode este codul de stare cerere-răspuns.

La efectuarea solicitărilor HTTP, dacă codul de stare a răspunsului este 200 puteți continua să răzuiți site-ul.

Obținerea datelor necesare folosind goquery

Obținerea site-ului HTML

În primul rând, trebuie să analizați codul HTML simplu din răspuns (răspuns.corp) pentru a obține un obiect document complet reprezentând pagina web:

document, err := goquery. NewDocumentFromReader (răspuns. Corp)

dacă greseala != zero {
Buturuga. Fatalln (eră)
}

Acum puteți utiliza obiectul document pentru a accesa structura și conținutul pe care le conține pagina web.

Selectarea elementelor necesare din HTML

Va trebui să inspectați pagina web pentru a verifica structura datelor pe care trebuie să le extrageți. Acest lucru vă va ajuta să construiți un selector pentru a-l accesa.

Folosind selectoare și localizatoare, puteți extrage HTML-ul de care aveți nevoie folosind Găsi metoda obiectului document.

The Găsi metoda necesită un selector CSS pentru a localiza elementul care conține datele de care aveți nevoie:

document. Găsiți ("tr.athing")

Codul de mai sus returnează doar primul element HTML care se potrivește cu selectorul sau o listă goală dacă nu a existat deloc o potrivire.

Selectarea mai multor elemente din HTML

De cele mai multe ori, veți dori să preluați toate elementele HTML care se potrivesc cu selectorul dvs.

Puteți selecta toate elementele care se potrivesc în HTML folosind Fiecare metoda valorii care Găsi() se intoarce. The Fiecare metoda preia o funcție cu doi parametri: un index și un selector de tip *goquery. Selecţie.

document. Find("tr.athing").Each(func(index int, selector *goquery. Selecţie) {
/* Selector de proces aici */
})

În corpul funcției, puteți selecta datele specifice pe care le doriți din HTML. În acest caz, aveți nevoie de linkurile și titlurile fiecărei postări pe care le listează pagina. Folosește Găsi metoda parametrului selector pentru a restrânge setul de elemente și a extrage textul sau valorile atributelor.

document. Find("tr.athing").Each(func(index int, selector *goquery. Selecţie) {
titlu := selector. Find("td.title").Text()
link, găsit := selector. Find("a.titlelink").Attr("href")
})

Codul de mai sus numește Text metoda rezultatului din selector. Găsi pentru a extrage conținutul unei celule de tabel. Selectarea atributelor, cum ar fi URL-urile link-urilor și imaginilor, necesită utilizarea Attr metodă. Această metodă returnează, de asemenea, o valoare care indică dacă atributul există.

Procesul este același pentru selectarea elementelor și atributelor de pe o pagină web.

The Găsi metoda este foarte puternică, permițând o gamă largă de operațiuni pentru selectarea și localizarea elementelor HTML. Le puteți explora în documentația goquery.

Salvarea datelor răzuite

Atributul linkului și titlul sunt șiruri pe care le puteți atribui variabilelor. În scenarii reale, veți salva într-o bază de date sau într-o structură de date pentru manipulare. Adesea, o simplă structură personalizată va fi suficientă.

Creați o structură cu câmpuri titlu și link și o porțiune de structuri pentru a păstra tipul de structura.

tip informație struct {
legătură şir
titlu şir
}
info := face([]Informație, 0)

Odată ce ați creat structura și slice, în corpul funcției metodei document, populați slice-ul în funcția pe care o treceți la metoda Find. Utilizați tipul de struct pentru a instanția noi structuri de date, fiecare conținând un rezultat.

info = adăuga(informații, informații{
titlu: titlu,
link: link,
})

Aceasta anexează tipuri de informație(structul) la info(slice) din care puteți manipula datele după bunul plac.

Imprimarea feliei arată că ați răzuit cu succes site-ul web și ați populat felia.

fmt. Println (informații)

Este rezonabil să salvați datele răzuite într-un cache local, astfel încât să nu atingeți serverul paginii web mai mult decât este necesar. Acest lucru nu numai că va reduce traficul, dar va accelera aplicația dvs., deoarece este mai rapid să preluați date locale decât să faceți solicitări și să curățați site-uri web.

Există multe pachete de baze de date în Go pe care le puteți folosi pentru a salva datele. The baza de date/sql pachetul acceptă baze de date SQL. Există, de asemenea, clienți de baze de date NoSQL, cum ar fi Driver MongoDB Go, și baze de date fără server precum FaunaDB care utilizează Driver FaunaDB.

Esența Web Scraping în Go

Dacă încercați să răzuiți date de pe un site web, goquery este un loc excelent pentru a începe. Dar este un pachet puternic care poate face mai mult decât scraping web. Puteți afla mai multe despre funcționalitatea sa în documentația oficială a proiectului.

Web scraping este o abilitate importantă în diferite domenii tehnologice și va fi utilă în timpul multor proiecte.

Cum să implementați concepte de programare orientată pe obiecte în Go

Citiți în continuare

AcțiuneTweetAcțiuneE-mail

Subiecte asemănătoare

  • Programare
  • Dezvoltare web
  • Programare

Despre autor

Ukeje Chukwuemeriwo Bunătate (3 articole publicate)

Goodness este un scriitor tehnic, dezvoltator backend și analist de date, simplificând diverse subiecte tehnologice în timp ce explorează acest domeniu fascinant.

Mai multe de la Ukeje Chukwuemeriwo Goodness

Aboneaza-te la newsletter-ul nostru

Alăturați-vă buletinului nostru informativ pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!

Click aici pentru a te abona