Scharf Beobachtet

Tech Know How

Webseiten auslesen mit Go und GoQuery

2022-03-05 09:16:32

Go ist eine vielseitig einsetzbare Programmiersprache. Der folgende Aspekt soll aufzeigen, wie einfach sich mit Go (oder Golang) das HTML von Webseiten auslesen und analysieren lässt.

Die Beispiel-Methode erwartet eine Url, lädt den Inhalt dahinter in einen String und durchsucht ihn mit dem Paket „github.com/PuerkitoBio/goquery“. Dieser Vorgang wird auch Scraping genannt.

package main

import (
	"fmt"
	"log"
	"net/http"

	"github.com/PuerkitoBio/goquery"
)

func UrlScraper(url string) {

	var ls []string
	fmt.Println(url)

	res, err := http.Get(url)
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()
	if res.StatusCode != 200 {
		log.Fatalf("status code error: %d %s", res.StatusCode, res.Status)
	}

	doc, err := goquery.NewDocumentFromReader(res.Body)
	if err != nil {
		log.Fatal(err)
	}

	doc.Find("body").Each(func(i int, s *goquery.Selection) {
		title := s.Find("h1,h2,h3,h4").Text()
		fmt.Println(i, title)
		ls = append(ls, title)
	})

	fmt.Printf("Einträge: %d", len(ls))
	fmt.Println(".")
}

func main() {

	url := "https://www.scharf-beobachtet.de"
	UrlScraper(url)
}

Der Scraper lädt den Quellcode der Url. Im Anschluss bewegt sich die Funktion über einen Each-Loop durch Elemente. Hier den einen Body. Es sind aber auch hier schon Klassen-Selektoren möglich, wie „.teaser“. Darin wird dann noch weiter gesucht.

So sieht man sehr gut das wir auch bequem eingrenzen und verschachteln können.

Am Ende steht dann nur noch die Main-Funktion, die eine Url hält und in den Scraper gibt.

Zur Ausführung dann

go get .
go run .

in dem Verzeichnis aufrufen wo die main.go Datei abliegt. Der erste Befehl holt die github Dependencies, der zweite führt dann aus.

Screenshot Ausführung des Programmes
Screenshot Ausführung des Programmes

Wer sich das lieber in Python ansehen möchte, sollte sich unbedingt die Pakete requests und BeautifulSoup4 ansehen.

Zurück