Alternatieven voor Beautiful Soup in Go
Doorgaan met het onderwerp van het extraheren van gegevens uit html
- Voor een directe analoog van Beautiful Soup in Go, gebruik soup.
- Voor ondersteuning van CSS-selectors, overweeg goquery.
- Voor XPath-query’s, gebruik htmlquery.
- Voor een ander Beautiful Soup-inspiratieoptie, 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 analoog 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 het zoeken op basis van tags 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 op basis van Go’s standaard HTML-parsenbibliotheek 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]")
De tekst van het eerste `` element extraheren:
h1 := htmlquery.FindOne(doc, "//h1")
fmt.Println(htmlquery.InnerText(h1)) // Geeft de tekst binnen weer
Alle waarden van het href
-attribuut uit `` 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.
- Navigeren en manipuleren van HTML-bomen op programmeermatige wijze.
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("Bezoeken", r.URL)
})
c.Visit("http://go-colly.org/")
}
Vergelijkings tabel
Bibliotheek | API-stijl | Ondersteuning voor selectoren | 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 analoog van Beautiful Soup in Go, gebruik soup.
- Voor ondersteuning van CSS-selectors, overweeg goquery.
- Voor XPath-query’s, gebruik htmlquery.
- Voor een ander Beautiful Soup-inspiratieoptie, kijk naar Node.
Allemaal deze bibliotheken gebruiken Go’s standaard HTML-parser, die robuust en HTML5-compliant is, dus het belangrijkste verschil is in API-stijl en selectorfunctionaliteit.