Alternatif Beautiful Soup untuk Go

Melanjutkan topik mengenai ekstraksi data dari HTML

Konten Halaman
  • Untuk analog langsung dari Beautiful Soup dalam Go, gunakan soup.
  • Untuk dukungan selector CSS, pertimbangkan goquery.
  • Untuk query XPath, gunakan htmlquery.
  • Untuk opsi lain yang terinspirasi dari Beautiful Soup, lihat Node.

Jika Anda mencari ekivalen Beautiful Soup dalam Go, beberapa library menawarkan fungsi HTML parsing dan scraping yang serupa:

gopher sedang memasak soup

soup

  • soup adalah library Go yang dirancang secara eksplisit sebagai analog dari Beautiful Soup dalam Python. API-nya sengaja mirip, dengan fungsi seperti Find, FindAll, dan HTMLParse, sehingga memudahkan pengembang yang sudah familiar dengan Beautiful Soup untuk beralih ke Go.
  • Ia memungkinkan Anda mengambil halaman web, memparse HTML, dan menelusuri DOM untuk mengekstrak data, mirip seperti Beautiful Soup.
  • Contoh penggunaan:
    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"])
    }
    
  • Catatan: soup tidak mendukung selector CSS atau XPath; ia bergantung pada pencarian berdasarkan tag dan atribut.

goquery

  • goquery adalah library Go populer lainnya untuk parsing HTML, menawarkan sintaks mirip jQuery untuk traversal dan manipulasi DOM.
  • Ia mendukung selector CSS, membuatnya lebih fleksibel untuk query kompleks dibandingkan soup.
  • Contoh penggunaan:
    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", ""))
    })
    

Library htmlquery Go

htmlquery adalah library Go yang dirancang untuk memparse dan mengekstrak data dari dokumen HTML menggunakan ekspresi XPath. Ia menyediakan API yang sederhana untuk menelusuri dan mengquery struktur pohon HTML, membuatnya sangat berguna untuk tugas scraping dan ekstraksi data.

Fitur Utama

  • Memungkinkan query dokumen HTML dengan ekspresi XPath 1.0/2.0.
  • Mendukung memuat HTML dari string, file, atau URL.
  • Menyediakan fungsi untuk mencari satu atau beberapa node, mengekstrak atribut, dan mengevaluasi ekspresi XPath.
  • Termasuk caching query (berbasis LRU) untuk meningkatkan kinerja dengan menghindari kompilasi ulang ekspresi XPath.
  • Dibangun di atas library parsing HTML standar Go dan kompatibel dengan library Go lain seperti goquery.

Contoh Penggunaan Dasar

Memuat HTML dari string:

doc, err := htmlquery.Parse(strings.NewReader("..."))

Memuat HTML dari URL:

doc, err := htmlquery.LoadURL("http://example.com/")

Mencari semua elemen ``:

list := htmlquery.Find(doc, "//a")

Mencari semua elemen `` dengan atribut href:

list := htmlquery.Find(doc, "//a[@href]")

Mengekstrak teks dari elemen `` pertama:

h1 := htmlquery.FindOne(doc, "//h1")
fmt.Println(htmlquery.InnerText(h1)) // Menghasilkan teks di dalamnya

Mengekstrak semua nilai atribut href dari elemen ``:

list := htmlquery.Find(doc, "//a/@href")
for _, n := range list {
    fmt.Println(htmlquery.SelectAttr(n, "href"))
}

Kasus Penggunaan Umum

  • Scraping web di mana XPath memberikan query yang lebih presisi atau kompleks dibandingkan selector CSS.
  • Mengekstrak data terstruktur dari dokumen HTML.
  • Menelusuri dan memanipulasi pohon HTML secara programatis.

Instalasi

go get github.com/antchfx/htmlquery

Node

  • Node adalah package Go yang terinspirasi oleh Beautiful Soup, menyediakan API untuk mengekstrak data dari dokumen HTML dan XML.

Colly

Colly - Kerangka kerja scraping web untuk Go, yang menggunakan goquery secara internal untuk parsing HTML.

https://github.com/gocolly/colly

Untuk menginstal - tambahkan colly ke file go.mod Anda:

module github.com/x/y

go 1.14

require (
        github.com/gocolly/colly/v2 latest
)

Contoh:

func main() {
	c := colly.NewCollector()

	// Mencari dan mengunjungi semua tautan
	c.OnHTML("a[href]", func(e *colly.HTMLElement) {
		e.Request.Visit(e.Attr("href"))
	})

	c.OnRequest(func(r *colly.Request) {
		fmt.Println("Mengunjungi", r.URL)
	})

	c.Visit("http://go-colly.org/")
}

Tabel Perbandingan

Library Gaya API Dukungan Selector Inspirasi Catatan
soup Mirip Beautiful Soup Tag & atribut saja Beautiful Soup Sederhana, tidak ada CSS/XPath
goquery Mirip jQuery Selector CSS jQuery Fleksibel, populer
htmlquery XPath XPath lxml/XPath Query lanjutan
Node Mirip Beautiful Soup Tag & atribut Beautiful Soup Mirip dengan soup

Ringkasan

  • Untuk analog langsung dari Beautiful Soup dalam Go, gunakan soup.
  • Untuk dukungan selector CSS, pertimbangkan goquery.
  • Untuk query XPath, gunakan htmlquery.
  • Untuk opsi lain yang terinspirasi dari Beautiful Soup, lihat Node.

Semua library ini memanfaatkan Go’s parser HTML standar, yang robust dan kompatibel dengan HTML5, sehingga perbedaan utamanya terletak pada gaya API dan kemampuan selector.

Tautan yang Berguna