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.
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:
- Efectuarea de solicitări HTTP.
- Folosind selectoare și localizatoare pentru a obține datele necesare.
- 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
Subiecte asemănătoare
- Programare
- Dezvoltare web
- Programare
Despre autor
Goodness este un scriitor tehnic, dezvoltator backend și analist de date, simplificând diverse subiecte tehnologice în timp ce explorează acest domeniu fascinant.
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