Alternatywy Beautiful Soup w Go

Kontynuując temat pozyskiwania danych z HTML.

Page content
  • Jeśli szukasz bezpośredniego odpowiednika Beautiful Soup w Go, skorzystaj z soup.
  • W przypadku obsługi selektorów CSS, rozważ goquery.
  • Do zapytań XPath użyj htmlquery.
  • Inna opcja inspirowana Beautiful Soup to Node.

Jeśli szukasz odpowiednika Beautiful Soup w Go, istnieje kilka bibliotek oferujących podobną funkcjonalność parse’owania i scrapingu HTML:

gopher gotuje zupę

soup

  • soup to biblioteka w Go, zaprojektowana wyraźnie jako odpowiednik Pythonowej biblioteki Beautiful Soup. Jej interfejs API jest celowo podobny i oferuje funkcje takie jak Find, FindAll oraz HTMLParse, co ułatwia przejście na Go programistom znającym Beautiful Soup.
  • Pozwala na pobieranie stron internetowych, parse’owanie HTML oraz nawigację po drzewie DOM w celu wyciągania danych, podobnie jak Beautiful Soup.
  • Przykład użycia:
    resp, err := soup.Get("https://xkcd.com")
    if err != nil {
        os.Exit(1)
    }
    doc := soup.HTMLParse(resp)
    links := doc.Find("div", "id", "comicLinks").FindAll("a")
    for _, link := range links {
        fmt.Println(link.Text(), "| Link :", link.Attrs()["href"])
    }
    
  • Uwaga: soup nie obsługuje selektorów CSS ani XPath; opiera się na wyszukiwaniu na podstawie tagów i atrybutów.

goquery

  • goquery to inna popularna biblioteka w Go do parse’owania HTML, oferująca składnię podobną do jQuery do nawigacji i manipulacji drzewem DOM.
  • Obsługuje selektory CSS, co czyni ją bardziej elastyczną przy złożonych zapytaniach w porównaniu z soup.
  • Przykład użycia:
    doc, err := goquery.NewDocumentFromReader(resp.Body)
    doc.Find("div#comicLinks a").Each(func(i int, s *goquery.Selection) {
        fmt.Println(s.Text(), "| Link :", s.AttrOr("href", ""))
    })
    

Biblioteka htmlquery w Go

htmlquery to biblioteka w Go zaprojektowana do parse’owania i wyciągania danych z dokumentów HTML za pomocą wyrażeń XPath. Zapewnia prosty interfejs API do nawigacji po strukturze drzewa HTML i wykonywania zapytań, co czyni ją szczególnie przydatną do zadań związanych ze scrapingiem stron internetowych i ekstrakcją danych.

Kluczowe funkcje

  • Pozwala na wykonywanie zapytań do dokumentów HTML za pomocą wyrażeń XPath 1.0/2.0.
  • Obsługuje ładowanie HTML ze łańcuchów znaków, plików lub adresów URL.
  • Oferuje funkcje do wyszukiwania pojedynczych lub wielu węzłów, wyciągania atrybutów oraz ewaluacji wyrażeń XPath.
  • Zawiera cache’owanie zapytań (oparte na LRU) w celu poprawy wydajności poprzez unikanie powtarzającego się kompilowania wyrażeń XPath.
  • Zbudowana na podstawie standardowych bibliotek parse’owania HTML w Go i kompatybilna z innymi bibliotekami Go, takimi jak goquery.

Przykłady podstawowego użycia

Ładowanie HTML ze łańcucha znaków:

doc, err := htmlquery.Parse(strings.NewReader("..."))

Ładowanie HTML z adresu URL:

doc, err := htmlquery.LoadURL("http://example.com/")

Znajdź wszystkie elementy ``:

list := htmlquery.Find(doc, "//a")

Znajdź wszystkie elementy `` z atrybutem href:

list := htmlquery.Find(doc, "//a[@href]")

Wyciągnij tekst pierwszego elementu ``:

h1 := htmlquery.FindOne(doc, "//h1")
fmt.Println(htmlquery.InnerText(h1)) // Wypisuje tekst wewnątrz

Wyciągnij wszystkie wartości atrybutu href z elementów ``:

list := htmlquery.Find(doc, "//a/@href")
for _, n := range list {
    fmt.Println(htmlquery.SelectAttr(n, "href"))
}

Typowe przypadki użycia

  • Scraping stron internetowych, gdzie XPath oferuje precyzyjniejsze lub bardziej złożone zapytania niż selektory CSS.
  • Ekstrakcja danych strukturalnych z dokumentów HTML.
  • Programowe nawigowanie i manipulowanie drzewami HTML.

Instalacja

go get github.com/antchfx/htmlquery

Node

  • Node to pakiet w Go inspirowany Beautiful Soup, zapewniający interfejsy API do wyciągania danych z dokumentów HTML i XML.

Colly

Colly - framework do scrapingu stron internetowych w Go, który wewnętrznie używa goquery do parse’owania HTML.

https://github.com/gocolly/colly

Aby zainstalować - dodaj colly do pliku go.mod:

module github.com/x/y

go 1.14

require (
        github.com/gocolly/colly/v2 latest
)

Przykład:

func main() {
	c := colly.NewCollector()

	// Find and visit all links
	c.OnHTML("a[href]", func(e *colly.HTMLElement) {
		e.Request.Visit(e.Attr("href"))
	})

	c.OnRequest(func(r *colly.Request) {
		fmt.Println("Visiting", r.URL)
	})

	c.Visit("http://go-colly.org/")
}

Tabela porównawcza

Biblioteka Styl API Obsługa selektorów Inspiracja Uwagi
soup podobny do Beautiful Soup Tylko tagi i atrybuty Beautiful Soup Prosty, bez CSS/XPath
goquery podobny do jQuery Selektory CSS jQuery Elastyczny, popularny
htmlquery XPath XPath lxml/XPath Zaawansowane zapytania
Node podobny do Beautiful Soup Tagi i atrybuty Beautiful Soup Podobny do soup

Podsumowanie

  • Jeśli szukasz bezpośredniego odpowiednika Beautiful Soup w Go, skorzystaj z soup.
  • W przypadku obsługi selektorów CSS, rozważ goquery.
  • Do zapytań XPath użyj htmlquery.
  • Inna opcja inspirowana Beautiful Soup to Node.

Wszystkie te biblioteki korzystają ze standardowego parsera HTML w Go, który jest solidny i zgodny ze specyfikacją HTML5, dlatego główna różnica polega na stylu API i możliwościach selektorów.

Przydatne linki

Subskrybuj

Otrzymuj nowe wpisy o systemach, infrastrukturze i inżynierii AI.