Go (Golang) में HTML पार्सिंग: लाइब्रेरीज़ और व्यावहारिक उदाहरण
Go (Golang) एक कंपाइल्ड, स्टैटिकली टाइप की गई भाषा है जो हाई-परफॉर्मेंस वेब स्क्रैपिंग और HTML पार्सिंग टूल बनाने के लिए बहुत उपयुक्त है। इसकी बिल्ट-इन स्टैंडर्ड लाइब्रेरी net/html एक लो-लेवल टोकनाइज़र प्रदान करती है, लेकिन DOM ट्री और CSS सेलेक्टर्स के साथ आसानी से काम करने के लिए अक्सर थर्ड-पार्टी पैकेज का उपयोग किया जाता है। इस लेख में हम तीन मुख्य टूल्स पर चर्चा करेंगे: goquery, colly और स्टैंडर्ड पैकेज net/html। आप जानेंगे कि सही टूल कैसे चुनें और काम करने वाले कोड उदाहरण देखेंगे।
1. स्टैंडर्ड लाइब्रेरी: net/html
golang.org/x/net/html पैकेज एक टोकनाइज़र और HTML पार्सर प्रदान करता है। यह HTML5 स्पेसिफिकेशन को लागू करता है और डॉक्यूमेंट को नोड्स के ट्री में पार्स करता है। यह सबसे हल्का और तेज़ विकल्प है, लेकिन नेविगेशन के लिए अधिक कोड लिखना पड़ता है।
उदाहरण: पेज से सभी लिंक (<a href>) निकालना:
package main
import (
"fmt"
"golang.org/x/net/html"
"net/http"
"strings"
)
func main() {
resp, _ := http.Get("https://example.com")
defer resp.Body.Close()
doc, _ := html.Parse(resp.Body)
var links []string
var f func(*html.Node)
f = func(n *html.Node) {
if n.Type == html.ElementNode && n.Data == "a" {
for _, attr := range n.Attr {
if attr.Key == "href" {
links = append(links, attr.Val)
}
}
}
for c := n.FirstChild; c != nil; c = c.NextSibling {
f(c)
}
}
f(doc)
fmt.Println(strings.Join(links, "\n"))
}
फायदे: न्यूनतम डिपेंडेंसी, तेज़ स्पीड।
नुकसान: CSS सेलेक्टर्स नहीं हैं, रिकर्सिव ट्रैवर्सल लिखना पड़ता है।
2. goquery — Go के लिए jQuery
goquery Go में HTML पार्सिंग के लिए सबसे लोकप्रिय लाइब्रेरी है। यह अंदरूनी रूप से net/html का उपयोग करती है और jQuery जैसा सिंटैक्स जोड़ती है। आप एलिमेंट्स खोजने, चेन कॉल करने और DOM में हेरफेर करने के लिए CSS सेलेक्टर्स का उपयोग कर सकते हैं।
इंस्टॉलेशन:
go get github.com/PuerkitoBio/goquery
उदाहरण: ब्लॉग से आर्टिकल के हेडिंग इकट्ठा करना:
package main
import (
"fmt"
"github.com/PuerkitoBio/goquery"
"log"
"net/http"
)
func main() {
resp, err := http.Get("https://habr.com/ru/all/")
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
doc, err := goquery.NewDocumentFromReader(resp.Body)
if err != nil {
log.Fatal(err)
}
doc.Find("article h2").Each(func(i int, s *goquery.Selection) {
title := s.Text()
link, _ := s.Find("a").Attr("href")
fmt.Printf("%d. %s\n %s\n", i+1, title, link)
})
}
goquery के मुख्य मेथड:
Find(selector)— CSS सेलेक्टर से एलिमेंट खोजनाEach(func)— मिले एलिमेंट्स पर लूप करनाAttr(name)— एट्रीब्यूट की वैल्यू प्राप्त करनाText()— टेक्स्ट कंटेंट निकालनाHtml()— एलिमेंट के अंदर का HTML कोड प्राप्त करना
goquery तेज़ प्रोटोटाइपिंग और जटिल संरचना वाले पेजों को पार्स करने के लिए आदर्श है। लेकिन याद रखें: यह JavaScript को सपोर्ट नहीं करता — यह सिर्फ स्टैटिक HTML के लिए है।
3. Colly — वेब स्क्रैपिंग के लिए फ्रेमवर्क
Colly एक शक्तिशाली फ्रेमवर्क है जो न केवल HTML पार्सिंग (goquery के माध्यम से) करता है, बल्कि रिक्वेस्ट क्यू, कुकीज़, स्पीड लिमिट, कैशिंग और पैरेलल रिक्वेस्ट का प्रबंधन भी करता है। Colly को बड़े पैमाने पर डेटा कलेक्शन प्रोजेक्ट्स के लिए अनुशंसित किया जाता है।
पुस्तकालय में भी
Swift (iOS/macOS) में PDF जनरेशन: UIGraphicsPDFRenderer, PDFKit और Core Graphics
Prometheus मेट्रिक्स C# (.NET) में — prometheus-net लाइब्रेरी
Fiber Go: पूर्ण गाइड, उदाहरण और उपयोग विधि
C# (.NET) में HTML पार्सिंग: HtmlAgilityPack और AngleSharp लाइब्रेरीज़