Alternatieven voor Beautiful Soup in Go
Doorgaan met het onderwerp van het extraheren van gegevens uit html
- Voor een directe analogon van Beautiful Soup in Go, gebruik soup.
- Voor ondersteuning van CSS-selectors, overweeg goquery.
- Voor XPath-query’s, gebruik htmlquery.
- Voor een andere Beautiful Soup-inspiratie, kijk naar Node.
Als je op zoek bent naar een Beautiful Soup equivalent in Go, bieden verschillende bibliotheken vergelijkbare functionaliteit voor het parsen en scannen van HTML:
soup
- soup is een Go-bibliotheek die expliciet is ontworpen als een analogon van Python’s Beautiful Soup. De API is opzetten op een manier die vergelijkbaar is met die van Beautiful Soup, met functies zoals
Find
,FindAll
enHTMLParse
, waardoor het voor ontwikkelaars die vertrouwd zijn met Beautiful Soup gemakkelijk is om over te stappen naar Go. - Het stelt je in staat om webpagina’s op te halen, HTML te parsen en de DOM te doorlopen om gegevens te extraheren, net zoals Beautiful Soup.
- Voorbeeldgebruik:
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"]) }
- Opmerking: soup ondersteunt geen CSS-selectors of XPath; het vertrouwt op zoekacties op basis van tag en attributen.
goquery
- goquery is een andere populaire Go-bibliotheek voor het parsen van HTML, die een jQuery-achtige syntaxis biedt voor het doorlopen en manipuleren van de DOM.
- Het ondersteunt CSS-selectors, waardoor het flexibeler is voor complexe queries dan soup.
- Voorbeeldgebruik:
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", "")) })
htmlquery Go-bibliotheek
htmlquery is een Go-bibliotheek die is ontworpen voor het parsen en extraheren van gegevens uit HTML-documenten met behulp van XPath-uitdrukkingen. Het biedt een eenvoudige API voor het doorlopen en queryen van de HTML-bomenstructuur, waardoor het vooral handig is voor web-scraping en gegevensextraktie.
Belangrijke functies
- Stelt het mogelijk om HTML-documenten te queryen met XPath 1.0/2.0-uitdrukkingen.
- Ondersteunt het laden van HTML uit strings, bestanden of URLs.
- Biedt functies om enkele of meerdere knooppunten te vinden, attributen te extraheren en XPath-uitdrukkingen te evalueren.
- Bevat query-caching (LRU-gebaseerd) om prestaties te verbeteren door herhaalde compilatie van XPath-uitdrukkingen te vermijden.
- Is opgebouwd bovenop de standaard HTML-parsingsbibliotheek van Go en is compatibel met andere Go-bibliotheken zoals goquery.
Basisgebruikvoorbeelden
HTML laden vanuit een string:
doc, err := htmlquery.Parse(strings.NewReader("..."))
HTML laden vanuit een URL:
doc, err := htmlquery.LoadURL("http://example.com/")
Alle `` elementen vinden:
list := htmlquery.Find(doc, "//a")
Alle `` elementen met een href
-attribuut vinden:
list := htmlquery.Find(doc, "//a[@href]")
Het tekstinhoud van het eerste `` element extraheren:
h1 := htmlquery.FindOne(doc, "//h1")
fmt.Println(htmlquery.InnerText(h1)) // Geeft de tekst binnen
Alle waarden van het href
-attribuut van `` elementen extraheren:
list := htmlquery.Find(doc, "//a/@href")
for _, n := range list {
fmt.Println(htmlquery.SelectAttr(n, "href"))
}
Typische toepassingsgebieden
- Web-scraping waarbij XPath meer nauwkeurige of complexe query’s biedt dan CSS-selectors.
- Structuurdata extraheren uit HTML-documenten.
- Programmatisch doorlopen en manipuleren van HTML-bomen.
Installatie
go get github.com/antchfx/htmlquery
Node
- Node is een Go-pakket dat is geïnspireerd door Beautiful Soup en biedt API’s voor het extraheren van gegevens uit HTML- en XML-documenten.
Colly
Colly - Een web-scraping framework voor Go, dat intern goquery gebruikt voor het parsen van HTML.
https://github.com/gocolly/colly
Voor installatie - voeg colly toe aan je go.mod-bestand:
module github.com/x/y
go 1.14
require (
github.com/gocolly/colly/v2 latest
)
Voorbeeld:
func main() {
c := colly.NewCollector()
// Zoek en bezoek alle links
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
e.Request.Visit(e.Attr("href"))
})
c.OnRequest(func(r *colly.Request) {
fmt.Println("Bezoekend", r.URL)
})
c.Visit("http://go-colly.org/")
}
Vergelijkings tabel
Bibliotheek | API-stijl | Ondersteuning voor selectors | Inspiratie | Opmerkingen |
---|---|---|---|---|
soup | Beautiful Soup-achtig | Tag & attribuut alleen | Beautiful Soup | Eenvoudig, geen CSS/XPath |
goquery | jQuery-achtig | CSS-selectors | jQuery | Flexibel, populair |
htmlquery | XPath | XPath | lxml/XPath | Geavanceerde query’s |
Node | Beautiful Soup-achtig | Tag & attribuut | Beautiful Soup | Vergelijkbaar met soup |
Samenvatting
- Voor een directe analogon van Beautiful Soup in Go, gebruik soup.
- Voor ondersteuning van CSS-selectors, overweeg goquery.
- Voor XPath-query’s, gebruik htmlquery.
- Voor een andere Beautiful Soup-inspiratie, kijk naar Node.
Allemaal bibliotheken gebruiken de standaard HTML-parser van Go, die robuust is en HTML5-compliant, dus het belangrijkste verschil is in API-stijl en selectorfunctionaliteit.