تحليل HTML في C# (.NET): نظرة عامة على مكتبات HtmlAgilityPack و AngleSharp
يعد تحليل HTML إحدى المهام الأساسية عند تطوير أدوات استخراج بيانات الويب، أو محللي المحتوى، أو الاختبارات الآلية. في نظام .NET البيئي، توجد عدة مكتبات قوية تسمح باستخراج البيانات من مستندات HTML، والتعامل مع شجرة DOM، وتنفيذ استعلامات معقدة. في هذه المقالة، سنستعرض المكتبتين الأكثر شيوعًا: HtmlAgilityPack و AngleSharp. ستتعرف على ميزاتها ومزاياها وستحصل على أمثلة جاهزة للكود بلغة C#.
HtmlAgilityPack: النهج الكلاسيكي
HtmlAgilityPack (HAP) هي أقدم وأشهر مكتبة لتحليل HTML في .NET. توفر واجهة برمجة تطبيقات بديهية للتنقل عبر شجرة DOM، وتدعم XPath واستعلامات LINQ. الإمكانيات الرئيسية:
- تحميل HTML من سلسلة نصية، ملف، أو رابط URL.
- دعم XPath 1.0 للبحث الدقيق عن العناصر.
- التعامل مع السمات، النص، والعقد المتداخلة.
- التصحيح التلقائي لـ HTML غير الصحيح (مثل الوسوم غير المغلقة).
التثبيت
قم بتثبيت المكتبة عبر NuGet:
Install-Package HtmlAgilityPackأو عبر .NET CLI:
dotnet add package HtmlAgilityPackمثال: استخراج عناوين الأخبار
لنفترض أننا بحاجة لاستخراج العناوين من موقع إخباري. إليك كيفية القيام بذلك باستخدام HAP و XPath:
using HtmlAgilityPack;using System;using System.Linq;
class Program{ static void Main() { // تحميل مستند HTML var web = new HtmlWeb(); var doc = web.Load("https://example-news.com"); // اختيار جميع العناوين h2 ذات الفئة "news-title" var titles = doc.DocumentNode .SelectNodes("//h2[@class='news-title']"); if (titles != null) { foreach (var title in titles) { Console.WriteLine(title.InnerText.Trim()); } } }}في هذا المثال، نستخدم تعبير XPath //h2[@class='news-title'] للعثور على جميع عناصر <h2> ذات الفئة المحددة. تقوم طريقة SelectNodes بإرجاع مجموعة من العقد، بينما يستخرج InnerText النص بدون وسوم HTML.
التعامل مع السمات
غالبًا ما نحتاج إلى الحصول على قيمة سمة، مثل الروابط من وسوم <a>:
var links = doc.DocumentNode.SelectNodes("//a[@href]");if (links != null){ foreach (var link in links) { string href = link.GetAttributeValue("href", ""); Console.WriteLine(href); }}AngleSharp: محلل حديث مع محددات CSS
AngleSharp هي مكتبة أكثر حداثة تدعم ليس فقط XPath، بل أيضًا محددات CSS، مما يجعلها ملائمة للمطورين الملمين بتقنيات الويب. كما أنها تتوافق تمامًا مع معايير W3C ويمكنها التعامل مع المحتوى الديناميكي.
- دعم محددات CSS (مثل jQuery).
- التعامل مع HTML، XML، SVG و MathML.
- إمكانية تنفيذ JavaScript (عبر الإضافات).
- تحميل المستندات بشكل غير متزامن.
التثبيت
dotnet add package AngleSharpمثال: استخراج البيانات باستخدام محددات CSS
لنكرر المثال السابق، ولكن الآن باستخدام AngleSharp ومحددات CSS:
using AngleSharp;using AngleSharp.Html.Parser;using System;using System.Linq;using System.Threading.Tasks;
class Program{ static async Task Main() { // إنشاء محلل var parser = new HtmlParser(); // تحميل HTML (يمكن من سلسلة نصية أو رابط URL) var document = await parser.ParseDocumentAsync( a أيضاً في المكتبة
GraphQL على Kotlin: نظرة عامة على المكتبات والأدوات لتطوير الخادم
ترحيل قواعد البيانات في Java: نظرة عامة على الأدوات والمكتبات
معالجة وتحرير الصور باستخدام TypeScript: Jimp، Sharp، Canvas
عميل Elasticsearch لتطبيقات Swift (iOS/macOS) — دليل شامل