تحليل HTML في C# (.NET): مكتبات HtmlAgilityPack و AngleSharp

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تحليل 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

توصيات