Go (Golang) में HTML पार्सिंग: टूल्स का अवलोकन और उदाहरण
Go (Golang) — Google का एक कम्पाइल्ड, स्टैटिकली टाइप किया गया प्रोग्रामिंग भाषा है, जो उच्च-प्रदर्शन वाले पार्सर और वेब-स्क्रैपर बनाने के लिए आदर्श है। कंकरेंसी (गोरूटीन) के अंतर्निहित समर्थन और समृद्ध मानक लाइब्रेरी के कारण, Go किसी भी जटिलता के HTML दस्तावेज़ों को कुशलतापूर्वक संसाधित करने की अनुमति देता है। इस लेख में, हम Go पर HTML पार्सिंग के लिए मुख्य लाइब्रेरीज़, उनकी क्षमताओं की समीक्षा करेंगे और व्यावहारिक कोड उदाहरण प्रस्तुत करेंगे।
मानक लाइब्रेरी: net/html
पैकेज golang.org/x/net/html — Go में HTML के साथ काम करने का आधार है। यह एक टोकनाइज़र और पार्सर प्रदान करता है जो दस्तावेज़ का DOM-ट्री बनाता है। यह एक निम्न-स्तरीय उपकरण है, जो पार्सिंग प्रक्रिया पर पूर्ण नियंत्रण देता है, लेकिन सामान्य कार्यों के लिए अधिक कोड की आवश्यकता होती है।
HTML दस्तावेज़ से सभी लिंक निकालने के लिए net/html का उपयोग करने का उदाहरण:
package main
import ( "fmt" "golang.org/x/net/html" "strings")
func main() { htmlContent := `<html><body><a href="/page1">लिंक 1</a><a href="/page2">लिंक 2</a></body></html>` doc, _ := html.Parse(strings.NewReader(htmlContent)) 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) for _, link := range links { fmt.Println(link) }}यह कोड DOM-ट्री को रिकर्सिवली ट्रैवर्स करता है, सभी <a> टैग ढूंढता है और href एट्रीब्यूट का मान निकालता है। यह विधि सरल और विश्वसनीय है, लेकिन अधिक जटिल कार्यों (जैसे, CSS-सेलेक्टर द्वारा खोज) के लिए विशेष लाइब्रेरीज़ का उपयोग करना बेहतर है।
लाइब्रेरी goquery: Go के लिए jQuery
github.com/PuerkitoBio/goquery — Go में HTML पार्सिंग के लिए सबसे लोकप्रिय लाइब्रेरी है। यह jQuery जैसा API प्रदान करती है: CSS-सेलेक्टर द्वारा एलिमेंट चयन, मेथड चेनिंग, DOM मैनिपुलेशन। यह कोड को संक्षिप्त और पठनीय बनाता है।
स्थापना:
go get github.com/PuerkitoBio/goqueryशीर्षक और लिंक निकालने के साथ पेज पार्सिंग का उदाहरण:
package main
import ( "fmt" "log" "net/http"
"github.com/PuerkitoBio/goquery")
func main() { // HTML पेज लोड करें res, err := http.Get("https://example.com") if err != nil { log.Fatal(err) } defer res.Body.Close()
// HTML पार्स करें doc, err := goquery.NewDocumentFromReader(res.Body) if err != nil { log.Fatal(err) }
// h2 शीर्षक निकालें doc.Find("h2").Each(func(i int, s *goquery.Selection) { fmt.Printf("शीर्षक %d: %s", i+1, s.Text()) })
// सभी लिंक निकालें doc.Find("a").Each(func(i int, s *goquery.Selection) { link, _ := s.Attr("href") text := s.Text() fmt.Printf("लिंक %d: %s (%s)", i+1, text, link) })}goquery की प्रमुख क्षमताएँ:
- CSS-सेलेक्टर: सभी मानक सेलेक्टर (क्लास, ID, एट्रीब्यूट, स्यूडो-क्लास) का समर्थन।
- मेथड चेनिंग:
Find().Filter().Each()— कोड jQuery की तरह लिखा जाता है। - डेटा निष्कर्षण:
Text(),Html(),Attr()मेथड। - DOM संशोधन:
SetText(),SetHtml(),Append()।
बड़ी मात्रा में डेटा के साथ काम करने के लिए goquer