Alternatif Beautiful Soup untuk Go
Melanjutkan topik mengenai ekstraksi data dari HTML
- 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:
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
, danHTMLParse
, 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.