Alternativas ao Beautiful Soup para Go
Continuando o tema de extração de dados de HTML
- Para um análogo direto do Beautiful Soup em Go, use soup.
- Para suporte a seletores CSS, considere goquery.
- Para consultas XPath, use htmlquery.
- Para outra opção inspirada no Beautiful Soup, veja Node.
Se você está procurando um equivalente do Beautiful Soup em Go, várias bibliotecas oferecem funcionalidades semelhantes para análise e raspagem de HTML:
soup
- soup é uma biblioteca Go explicitamente projetada como um análogo ao Beautiful Soup do Python. Sua API é intencionalmente semelhante, com funções como
Find
,FindAll
eHTMLParse
, tornando fácil para desenvolvedores familiarizados com o Beautiful Soup migrar para o Go. - Ele permite que você obtenha páginas da web, analise HTML e percorra o DOM para extrair dados, muito como o Beautiful Soup.
- Exemplo de uso:
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"]) }
- Observação: soup não suporta seletores CSS ou XPath; ele depende de buscas baseadas em tags e atributos.
goquery
- goquery é outra biblioteca popular do Go para análise de HTML, oferecendo uma sintaxe semelhante à do jQuery para navegação e manipulação do DOM.
- Ele suporta seletores CSS, tornando-o mais flexível para consultas complexas em comparação com soup.
- Exemplo de uso:
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", "")) })
Biblioteca htmlquery do Go
htmlquery é uma biblioteca do Go projetada para analisar e extrair dados de documentos HTML usando expressões XPath. Ela fornece uma API direta para navegar e consultar a estrutura da árvore HTML, tornando-a especialmente útil para raspagem de web e extração de dados.
Funcionalidades Principais
- Permite consultar documentos HTML com expressões XPath 1.0/2.0.
- Suporta carregar HTML de strings, arquivos ou URLs.
- Oferece funções para encontrar um ou múltiplos nós, extrair atributos e avaliar expressões XPath.
- Inclui cache de consulta (baseado em LRU) para melhorar o desempenho evitando a compilação repetida de expressões XPath.
- Construída sobre as bibliotecas padrão de análise de HTML do Go e é compatível com outras bibliotecas do Go, como goquery.
Exemplos de Uso Básicos
Carregar HTML de uma string:
doc, err := htmlquery.Parse(strings.NewReader("..."))
Carregar HTML de uma URL:
doc, err := htmlquery.LoadURL("http://example.com/")
Encontrar todos os elementos ``:
list := htmlquery.Find(doc, "//a")
Encontrar todos os elementos `` com um atributo href
:
list := htmlquery.Find(doc, "//a[@href]")
Extrair o texto do primeiro elemento ``:
h1 := htmlquery.FindOne(doc, "//h1")
fmt.Println(htmlquery.InnerText(h1)) // Imprime o texto dentro
Extrair todos os valores do atributo href
dos elementos ``:
list := htmlquery.Find(doc, "//a/@href")
for _, n := range list {
fmt.Println(htmlquery.SelectAttr(n, "href"))
}
Casos de Uso Típicos
- Raspagem de web onde XPath oferece consultas mais precisas ou complexas do que seletores CSS.
- Extração de dados estruturados de documentos HTML.
- Navegação e manipulação programática de árvores HTML.
Instalação
go get github.com/antchfx/htmlquery
Node
- Node é um pacote Go inspirado no Beautiful Soup, fornecendo APIs para extrair dados de documentos HTML e XML.
Colly
Colly - Um framework de raspagem web para Go, que usa goquery internamente para análise de HTML.
https://github.com/gocolly/colly
Para instalar - adicione colly ao seu arquivo go.mod:
module github.com/x/y
go 1.14
require (
github.com/gocolly/colly/v2 latest
)
Exemplo:
func main() {
c := colly.NewCollector()
// Encontrar e visitar todos os 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 de Comparação
Biblioteca | Estilo da API | Suporte a Seletores | Inspiração | Notas |
---|---|---|---|---|
soup | Semelhante ao Beautiful Soup | Apenas tag e atributo | Beautiful Soup | Simples, sem CSS/XPath |
goquery | Semelhante ao jQuery | Seletores CSS | jQuery | Flexível, popular |
htmlquery | XPath | XPath | lxml/XPath | Consultas avançadas |
Node | Semelhante ao Beautiful Soup | Apenas tag e atributo | Beautiful Soup | Similar ao soup |
Resumo
- Para um análogo direto do Beautiful Soup em Go, use soup.
- Para suporte a seletores CSS, considere goquery.
- Para consultas XPath, use htmlquery.
- Para outra opção inspirada no Beautiful Soup, veja Node.
Todas essas bibliotecas utilizam o Go’s parser de HTML padrão, que é robusto e compatível com HTML5, então a principal diferença está no estilo da API e nas capacidades de seletores.
Links Úteis
- Gerando PDF em Python - Bibliotecas e exemplos"
- Folha de Dicas do Golang
- Desempenho da AWS Lambda: JavaScript vs Python vs Golang
- Corrigindo o erro de GORM AutoMigrate no PostgreSQL
- Popularidade de linguagens e frameworks de programação
- Folha de Dicas do Bash
- Gerando PDF em GO - Bibliotecas e exemplos"