C# (.NET) में HTML पार्सिंग: HtmlAgilityPack और AngleSharp लाइब्रेरीज़ का अवलोकन
HTML पार्सिंग वेब स्क्रैपर, सामग्री विश्लेषक और ऑटोमेशन टूल विकसित करते समय प्रमुख कार्यों में से एक है। C# (.NET) इकोसिस्टम में कई परिपक्व लाइब्रेरीज़ मौजूद हैं जो HTML दस्तावेज़ों से डेटा निकालने, DOM ट्री में हेरफेर करने और तत्वों से क्वेरी करने की अनुमति देती हैं। इस लेख में हम दो सबसे लोकप्रिय लाइब्रेरीज़: HtmlAgilityPack और AngleSharp, उनकी क्षमताओं, सिंटैक्स और उपयोग के उदाहरणों पर विस्तार से चर्चा करेंगे।
1. HtmlAgilityPack — समय-परीक्षित उपकरण
HtmlAgilityPack (HAP) .NET में HTML पार्सिंग के लिए सबसे पुरानी और सबसे व्यापक रूप से उपयोग की जाने वाली लाइब्रेरीज़ में से एक है। यह .NET Framework और .NET Core / .NET 5+ दोनों को सपोर्ट करती है। मुख्य लाभ "गंदे" HTML (अमान्य मार्कअप, बिना बंद टैग) के साथ काम करते समय सरलता और दोष-सहनशीलता है।
स्थापना
// NuGet Package Manager के माध्यम सेInstall-Package HtmlAgilityPack
// या .NET CLI के माध्यम सेdotnet add package HtmlAgilityPackमूल उदाहरण: H1 शीर्षक निकालना
using HtmlAgilityPack;
string html = @"<html><body> <h1>शीर्षक 1</h1> <h1>शीर्षक 2</h1> <p>पैराग्राफ का टेक्स्ट</p></body></html>";
var doc = new HtmlDocument();doc.LoadHtml(html);
var h1Nodes = doc.DocumentNode.SelectNodes("//h1");if (h1Nodes != null){ foreach (var node in h1Nodes) { Console.WriteLine(node.InnerText.Trim()); }}// आउटपुट:// शीर्षक 1// शीर्षक 2XPath और CSS-सेलेक्टर्स का उपयोग
HtmlAgilityPack डिफ़ॉल्ट रूप से नेविगेशन के लिए XPath का उपयोग करता है। हालांकि, HtmlAgilityPack.CssSelectors पैकेज की मदद से CSS-सेलेक्टर्स का उपयोग किया जा सकता है:
// स्थापना: dotnet add package HtmlAgilityPack.CssSelectorsusing HtmlAgilityPack.CssSelectors;
// ... दस्तावेज़ लोड करने के बादvar links = doc.DocumentNode.QuerySelectorAll("a.external-link");foreach (var link in links){ Console.WriteLine(link.GetAttributeValue("href", ""));}वास्तविक वेबसाइट का पार्सिंग
using System.Net.Http;using HtmlAgilityPack;
var url = "https://example.com/articles";var httpClient = new HttpClient();var html = await httpClient.GetStringAsync(url);
var doc = new HtmlDocument();doc.LoadHtml(html);
// सभी लेख शीर्षक निकालेंvar articles = doc.DocumentNode.SelectNodes("//article/h2/a");if (articles != null){ foreach (var article in articles) { var title = article.InnerText.Trim(); var link = article.GetAttributeValue("href", ""); Console.WriteLine($"{title} -> {link}"); }}2. AngleSharp — आधुनिक विकल्प
AngleSharp एक अपेक्षाकृत नई लाइब्रेरी है जो HTML5, CSS3, JavaScript (सीमित) और DOM विनिर्देशों के लिए पूर्ण समर्थन प्रदान करती है। यह उन कार्यों के लिए आदर्श है जहाँ ब्राउज़र रेंडरिंग के साथ सटीक अनुरूपता की आवश्यकता होती है। यह .NET Standard 2.0+ को सपोर्ट करती है, जिसका अर्थ है .NET Framework 4.6.1+ और .NET Core के साथ संगतता।
स्थापना
dotnet add package AngleSharpमूल उदाहरण: सभी लिंक निकालना
using AngleSharp;using AngleSharp.Dom;using AngleSharp.Html.Parser;
var html = @"<html><body> <a href='https://example.com'>उदाहरण</a> <a href='https://test.com'>परीक्षण</a></body></html>";
var parser = new HtmlParser();IDocument document = parser.ParseDocument(html);
var links = document.QuerySelectorAll("a");foreach (var link in links){ Console.WriteLine($"{link.TextContent} -> {link.GetAttribute("href")}");}// आउटपुट:// उदाहरण -> https://example.com// परीक्षण -> https://test.com