Web Scraping, auch als Webdatenextraktion bekannt, ist eine automatisierte Methode zum Extrahieren von Daten oder Inhalten aus Webseiten.
Web Scraper automatisieren die Datenextraktion ohne menschliches Eingreifen. Ein Scraper greift auf eine Webseite zu, indem er HTTP-Anforderungen sendet, ähnlich wie es ein Webbrowser tut. Anstatt jedoch das abgerufene HTML anzuzeigen, verarbeitet es es gemäß Ihren Anweisungen und speichert das Ergebnis.
Web Scraper sind praktisch, um Daten von Websites abzurufen, die keine APIs bereitstellen. Sie sind beliebt in Bereichen wie Datenwissenschaft, Cybersicherheit, Frontend- und Backend-Entwicklung.
Web-Scraping in Go
In Go gibt es verschiedene Web-Scraping-Pakete. Zu den beliebtesten gehören goquery, Colly und ChromeDP.
ChromeDP ist ein Selen-ähnliches Webtreiberpaket. Es unterstützt das Protokoll der Chrome-Entwicklertools in Go ohne Abhängigkeiten.
Colly ist eine Web-Scraping-spezifische Bibliothek, die mit goquery erstellt wurde. Aber goquery ist die schnellere Option zum Scrapen von Websites in Go.
Was ist goquery?
Die CSS-Bibliothek jQuery half bei der Inspiration goquery. Es ist eine Go-Bibliothek, die auf dem basiert net/html -Paket, das einen HTML5-kompatiblen Tokenizer und Parser implementiert. Es verwendet auch das Cascadia-Paket, das CSS-Selektoren zur Verwendung mit dem von net/html bereitgestellten Parser implementiert.
goquery installieren
Führen Sie den folgenden Befehl in Ihrem Terminal aus, um goquery zu installieren. Wenn Sie auf Fehler stoßen, versuchen Sie, Ihre Go-Version zu aktualisieren.
gehen Holen Sie sich github.com/PuerkitoBio/goquery
Der Web-Scraping-Prozess
Sie können den gesamten Scraping-Prozess in drei kleinere Aufgaben unterteilen:
- HTTP-Anfragen stellen.
- Verwendung von Selektoren und Locators um die erforderlichen Daten zu erhalten.
- Speichern von Daten in einer Datenbank oder Datenstrukturen zur Weiterverarbeitung.
HTTP-Anforderungen in Go erstellen
Sie können HTTP-Anfragen mit senden net/http Paket, das die Go-Standardbibliothek enthält.
Paket hauptsächlich
importieren "net/http"
importieren "Protokoll"
importieren "fmt"Funkhauptsächlich() {
webUrl := "https://news.ycombinator.com/"
Antwort, err:= http. Abrufen (webURL)
Wenn äh != Null {
Protokoll. Fatalln (äh)
} andersWenn Antwort. Statuscode == 200 {
fmt. Println("Wir können das kratzen")
} anders {
Protokoll. Fatalln ("Kratz das nicht")
}
}
http. Werden gibt einen Antworttext und einen Fehler zurück. Antwort. Statuscode ist der Request-Response-Statuscode.
Wenn Sie HTTP-Anforderungen stellen, wenn die Antwortstatuscode ist 200 Sie können mit dem Scrapen der Website fortfahren.
Abrufen der erforderlichen Daten mit goquery
Abrufen des Website-HTML
Zuerst müssen Sie den einfachen HTML-Code aus der Antwort analysieren (Antwort.Körper), um ein vollständiges Dokumentobjekt zu erhalten, das die Webseite darstellt:
Dokument, err := goquery. NewDocumentFromReader (Antwort. Körper)
Wenn äh != Null {
Protokoll. Fatalln (äh)
}
Sie können jetzt das Dokumentobjekt verwenden, um auf die Struktur und den Inhalt der Webseite zuzugreifen.
Auswählen erforderlicher Elemente aus dem HTML
Sie müssen die Webseite überprüfen, um die Struktur der Daten zu überprüfen, die Sie extrahieren müssen. Dies wird Ihnen helfen, einen Selektor zu konstruieren, um darauf zuzugreifen.
Mithilfe von Selektoren und Locators können Sie den benötigten HTML-Code extrahieren Finden Methode des Dokumentobjekts.
Das Finden -Methode verwendet einen CSS-Selektor, um das Element zu finden, das die erforderlichen Daten enthält:
dokumentieren. Finden ("tr.athing")
Der obige Code gibt nur das erste HTML-Element zurück, das mit dem Selektor übereinstimmt, oder eine leere Liste, wenn es überhaupt keine Übereinstimmung gab.
Auswählen mehrerer Elemente aus HTML
Meistens möchten Sie alle HTML-Elemente abrufen, die mit Ihrem Selektor übereinstimmen.
Alle übereinstimmenden Elemente im HTML können Sie über auswählen Jede Methode des Wertes that Finden() kehrt zurück. Das Jede Die Methode nimmt eine Funktion mit zwei Parametern auf: einen Index und einen Selektor vom Typ *goquery. Auswahl.
dokumentieren. Find("tr.athing").Each(Funk(Index int, Selektor *goquery. Auswahl) {
/* Prozessselektor hier */
})
Im Funktionstext können Sie die gewünschten spezifischen Daten aus dem HTML auswählen. In diesem Fall benötigen Sie die Links und Titel aller Beiträge, die die Seite auflistet. Verwenden Sie die Finden -Methode des Selektorparameters, um den Satz von Elementen einzugrenzen und Text- oder Attributwerte zu extrahieren.
dokumentieren. Find("tr.athing").Each(Funk(Index int, Selektor *goquery. Auswahl) {
Titel := Selektor. Find("td.title").Text()
Link, gefunden := Selektor. Find("a.titlelink").Attr("href")
})
Der obige Code ruft die auf Text Methode des Ergebnisses aus Wähler. Finden um den Inhalt einer Tabellenzelle zu extrahieren. Zur Auswahl von Attributen – wie Link- und Bild-URLs – müssen Sie die verwenden Attr Methode. Diese Methode gibt auch einen Wert zurück, der angibt, ob das Attribut überhaupt existiert.
Der Prozess ist der gleiche für die Auswahl beliebiger Elemente und Attribute einer Webseite.
Das Finden -Methode ist sehr leistungsfähig und ermöglicht eine Vielzahl von Operationen zum Auswählen und Auffinden von HTML-Elementen. Sie können diese in der goquery-Dokumentation erkunden.
Speichern der geschabten Daten
Das Link-Attribut und der Titel sind Zeichenfolgen, die Sie Variablen zuweisen können. In realen Szenarien speichern Sie zur Bearbeitung in einer Datenbank oder einer Datenstruktur. Oft reicht eine einfache benutzerdefinierte Struktur aus.
Erstellen Sie eine Struktur mit Feldern Titel und Link und ein Segment von Strukturen, um den Strukturtyp zu halten.
Typ Information Struktur {
Verknüpfung Schnur
Titel Schnur
}
Infos := machen([]Information, 0)
Nachdem Sie die Struktur und das Slice erstellt haben, füllen Sie das Slice im Hauptteil der Dokumentmethodenfunktion in der Funktion auf, die Sie an die Find-Methode übergeben. Verwenden Sie den Strukturtyp, um neue Datenstrukturen zu instanziieren, die jeweils ein Ergebnis enthalten.
Infos = anhängen(Informationen, Informationen{
Titel: Titel,
verlinken: verlinken,
})
Dies hängt Arten von an Information(die Struktur) zu der die Info(das Slice), aus dem Sie die Daten nach Belieben manipulieren können.
Das Drucken des Slice zeigt, dass Sie die Website erfolgreich geschabt und das Slice ausgefüllt haben.
fmt. Println (info)
Es ist sinnvoll, die gekratzten Daten in einem lokalen Cache zu speichern, damit Sie den Server der Webseite nicht mehr als nötig belasten. Dadurch wird nicht nur der Datenverkehr reduziert, sondern auch Ihre App beschleunigt, da das Abrufen lokaler Daten schneller ist als das Stellen von Anfragen und das Scrapen von Websites.
Es gibt viele Datenbankpakete in Go, die Sie zum Speichern der Daten verwenden können. Das Datenbank/sql Paket unterstützt SQL-Datenbanken. Es gibt auch NoSQL-Datenbankclients wie die MongoDB Go-Treiber, und serverlose Datenbanken wie FaunaDB mit dem FaunaDB-Treiber.
Die Essenz des Web Scraping in Go
Wenn Sie versuchen, Daten von einer Website zu kratzen, ist goquery ein ausgezeichneter Ausgangspunkt. Aber es ist ein leistungsstarkes Paket, das mehr kann als nur Web Scraping. Weitere Informationen zu seiner Funktionalität finden Sie in der offiziellen Projektdokumentation.
Web Scraping ist eine wichtige Fähigkeit in verschiedenen Technologiebereichen und wird sich bei vielen Ihrer Projekte als nützlich erweisen.
So implementieren Sie objektorientierte Programmierkonzepte in Go
Lesen Sie weiter
Verwandte Themen
- Programmierung
- Web Entwicklung
- Programmierung
Über den Autor
Goodness ist ein technischer Redakteur, Backend-Entwickler und Datenanalyst, der verschiedene Technologiethemen vereinfacht, während er dieses faszinierende Gebiet erforscht.
Abonnieren Sie unseren Newsletter
Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!
Klicken Sie hier, um sich anzumelden