تحليل HTML في C# (.NET): نظرة عامة على مكتبات HtmlAgilityPack وAngleSharp
تحليل HTML هي إحدى المهام الأساسية عند تطوير أدوات استخراج بيانات الويب، محللي المحتوى، وأدوات الأتمتة. في نظام C# (.NET) البيئي، توجد عدة مكتبات ناضجة تسمح باستخراج البيانات من مستندات HTML، والتعامل مع شجرة DOM، وتنفيذ الاستعلامات على العناصر. في هذه المقالة، سنستعرض بالتفصيل المكتبتين الأكثر شيوعًا: HtmlAgilityPack وAngleSharp، وإمكانياتهما، وبناء الجملة، وأمثلة الاستخدام.
1. HtmlAgilityPack — أداة مجربة عبر الزمن
HtmlAgilityPack (HAP) هي واحدة من أقدم وأكثر المكتبات انتشارًا لتحليل HTML في .NET. تدعم كلاً من .NET Framework و.NET Core / .NET 5+. الميزة الرئيسية هي البساطة والتحمل عند العمل مع HTML "غير النظيف" (ترميز غير صالح، علامات غير مغلقة).
التثبيت
// عبر NuGet Package ManagerInstall-Package HtmlAgilityPack
// أو عبر .NET CLIdotnet 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// العنوان 2استخدام XPath ومحددات 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'>Example</a> <a href='https://test.com'>Test</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")}");}// الإخراج:// Example -> https://example.com// Test -> https://test.com