Go में HTML पार्सिंग: लाइब्रेरीज़ और कोड उदाहरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

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 को बड़े पैमाने पर डेटा कलेक्शन प्रोजेक्ट्स के लिए अनुशंसित किया जाता है।

अनुशंसाएँ