Alternatywy Beautiful Soup w Go
Kontynuując temat pozyskiwania danych z HTML.
- 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:

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,FindAllorazHTMLParse, 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.