Go:
HTML विश्लेषण

कैसे करें:

Go में HTML पार्स करने के लिए, आप आम तौर पर goquery पैकेज या स्टैंडर्ड लाइब्रेरी के net/html पैकेज का उपयोग करते हैं। यहाँ एक मूल उदाहरण है जो net/html का उपयोग करके एक वेबपेज से सभी लिंक्स निकालता है:

package main

import (
    "fmt"
    "golang.org/x/net/html"
    "net/http"
)

func main() {
    // HTML दस्तावेज़ प्राप्त करें
    res, err := http.Get("http://example.com")
    if err != nil {
        panic(err)
    }
    defer res.Body.Close()

    // HTML दस्तावेज़ को पार्स करें
    doc, err := html.Parse(res.Body)
    if err != nil {
        panic(err)
    }

    // DOM को पुनरावर्ती रूप से ट्रैवर्स करने के लिए फंक्शन
    var f func(*html.Node)
    f = func(n *html.Node) {
        if n.Type == html.ElementNode && n.Data == "a" {
            for _, a := range n.Attr {
                if a.Key == "href" {
                    fmt.Println(a.Val)
                    break
                }
            }
        }
        for c := n.FirstChild; c != nil; c = c.NextSibling {
            f(c)
        }
    }

    // DOM को ट्रैवर्स करें
    f(doc)
}

नमूना आउटपुट (मान लिया जाए कि http://example.com में दो लिंक्स हैं):

http://www.iana.org/domains/example
http://www.iana.org/domains/reserved

यह कोड एक HTML पेज का अनुरोध करता है, इसे पार्स करता है और DOM को पुनरावर्ती रूप से ट्रैवर्स करता है ता�कि सभी <a> टैग्स के href गुणों को खोजे और प्रिंट करे।

गहराई में

net/html पैकेज Go में HTML पार्सिंग के आधार प्रदान करता है, HTML5 मानक द्वारा निर्दिष्ट टोकनाइज़ेशन और पेड़ निर्माण एल्गोरिथ्म को सीधे लागू करता है। यह निम्न स्तरीय दृष्टिकोण शक्तिशाली है लेकिन जटिल कार्यों के लिए वर्बोज हो सकता है।

इसके विपरीत, jQuery से प्रेरित तृतीय-पक्ष goquery पैकेज, DOM मैनिपुलेशन और ट्रैवर्सल को सरल बनाने वाला उच्च स्तरीय इंटरफेस प्रदान करता है। यह डेवलपर्स को तत्व चयन, गुण निष्कर्षण, और कंटेंट मैनिपुलेशन जैसे कार्यों के लिए संक्षिप्त और व्यक्ति�रूप से कोड लिखने की अनुमति देता है।

हालांकि, goquery की सुविधा एक अतिरिक्त निर्भरता और संभवतः इसकी अमूर्तता स्तर के कारण धीमे प्रदर्शन की कीमत पर आती है। net/html और goquery (या अन्य पार्सिंग लाइब्रेरियों) के बीच चयन परियोजना की विशिष्ट आवश्यकताओं पर निर्भर करता है, जैसे कि प्रदर्शन अनुकूलन या उपयोग में आसानी की आवश्यकता।

ऐतिहासिक रूप से, Go में HTML पार्सिंग मूल स्ट्रिंग ऑपरेशंस से लेकर परिष्कृत DOM ट्री मैनिपुलेशन तक विकसित हुई है, भाषा के बढ़ते पारिस्थितिकी तंत्र और समुदाय की मजबूत वेब स्क्रैपिंग और डेटा निष्कर्षण उपकरणों की मांग को प्रतिबिंबित करती है। देशी क्षमताओं के बावजूद, goquery जैसी तृतीय-पक्ष लाइब्रेरियों का प्रसार Go समुदाय की मॉड्यूलर, पुन: उपयोग योग्य कोड की प्राथमिकता को उजागर करता है। हालांकि, प्रदर्शन-महत्वपूर्ण अनुप्रयोगों के लिए, प्रोग्रामर संभवतः अभी भी net/html पैकेज को पसंद करेंगे या सरल पार्सिंग कार्यों के लिए रेगेक्स का सहारा लेंगे, रेगेक्स-आधारित HTML पार्सिंग के सहज जोखिमों और सीमाओं को ध्यान में रखते हुए।