Alternatywy do Beautiful Soup dla Go
Kontynuując temat wyciągania danych z html
- Dla bezpośredniego odpowiednika Beautiful Soup w Go użyj soup.
- Dla obsługi selektorów CSS rozważ goquery.
- Dla zapytań XPath użyj htmlquery.
- Dla innego rozwiązania inspirowanego Beautiful Soup, spojrz na Node.
Jeśli szukasz odpowiednika Beautiful Soup w Go, kilka bibliotek oferuje podobną funkcjonalność parsowania i skrapowania HTML:
soup
- soup to biblioteka w języku Go zaprojektowana specjalnie jako odpowiednik Pythona’s Beautiful Soup. Jej API jest celowo podobne, oferując funkcje takie jak
Find
,FindAll
iHTMLParse
, co ułatwia programistom znanym z Beautiful Soup przejście na język Go. - Pozwala pobierać strony sieciowe, parsować HTML i przemieszczać się po DOM w celu wyodrębnienia 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 kolejna popularna biblioteka w języku Go do parsowania HTML, oferująca składnię podobną do jQuery do przemieszczania się i manipulowania DOM.
- Obsługuje selektory CSS, co czyni ją bardziej elastyczną do złożonych zapytań w porównaniu do 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 języku Go
htmlquery to biblioteka w języku Go zaprojektowana do parsowania i wyodrębniania danych z dokumentów HTML przy użyciu wyrażeń XPath. Zapewnia prosty interfejs API do przemieszczania się i wykonywania zapytań na strukturze drzewa HTML, co czyni ją szczególnie przydatną do skrapowania i wyodrębniania danych.
Główne funkcje
- Pozwala na wykonywanie zapytań do dokumentów HTML za pomocą wyrażeń XPath 1.0/2.0.
- Obsługuje ładowanie HTML z ciągów, plików lub adresów URL.
- Udostępnia funkcje do znajdowania pojedynczych lub wielu węzłów, wyodrębniania atrybutów i oceniania wyrażeń XPath.
- Zawiera pamięć podręczną do zapytań (opartą na LRU), aby poprawić wydajność, unikając ponownego kompilowania wyrażeń XPath.
- Zbudowana na bazie standardowych bibliotek parsowania HTML w języku Go i kompatybilna z innymi bibliotekami w języku Go, takimi jak goquery.
Przykłady podstawowego użycia
Wczytaj HTML z ciągu:
doc, err := htmlquery.Parse(strings.NewReader("..."))
Wczytaj 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]")
Wyodrębnij tekst pierwszego elementu ``:
h1 := htmlquery.FindOne(doc, "//h1")
fmt.Println(htmlquery.InnerText(h1)) // Wyświetla tekst wewnątrz
Wyodrębnij 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
- Skrapowanie sieciowe, gdzie XPath oferuje bardziej precyzyjne lub złożone zapytania niż selektory CSS.
- Wyodrębnianie danych strukturalnych z dokumentów HTML.
- Programowe przemieszczanie się i manipulowanie drzewami HTML.
Instalacja
go get github.com/antchfx/htmlquery
Node
- Node to pakiet w języku Go inspirowany Beautiful Soup, oferujący interfejsy API do wyodrębniania danych z dokumentów HTML i XML.
Colly
Colly - ramka do skrapowania sieci w języku Go, która wewnętrznie korzysta z goquery do parsowania HTML.
https://github.com/gocolly/colly
Aby zainstalować - dodaj colly do swojego 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()
// Znajdź i odwiedź wszystkie linki
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
e.Request.Visit(e.Attr("href"))
})
c.OnRequest(func(r *colly.Request) {
fmt.Println("Odwiedzam", r.URL)
})
c.Visit("http://go-colly.org/")
}
Tabela porównania
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 | Tylko tagi i atrybuty | Beautiful Soup | Podobny do soup |
Podsumowanie
- Dla bezpośredniego odpowiednika Beautiful Soup w Go użyj soup.
- Dla obsługi selektorów CSS rozważ goquery.
- Dla zapytań XPath użyj htmlquery.
- Dla innego rozwiązania inspirowanego Beautiful Soup, spojrz na Node.
Wszystkie te biblioteki korzystają z Go’s standardowego parsera HTML, który jest solidny i zgodny z HTML5, więc główną różnicą jest styl API i możliwości selektorów.