تحليل HTML في C# (.NET): نظرة عامة على المكتبات وأمثلة الكود

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

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

ابدأ الدورة

تحليل HTML في C# (.NET): من البسيط إلى المعقد



تحليل HTML هو إحدى المهام الأساسية عند تطوير أدوات استخراج الويب، ومحللي المحتوى، وأدوات الأتمتة. في نظام C# (.NET)، توجد عدة مكتبات ناضجة تسمح باستخراج البيانات بكفاءة من مستندات HTML، حتى لو كانت العلامات غير صالحة. في هذه المقالة، سنستعرض الأدوات الثلاث الأكثر شيوعًا: HtmlAgilityPack، AngleSharp، وCsQuery، بالإضافة إلى أمثلة عملية لاستخدامها.



1. HtmlAgilityPack — الخيار الكلاسيكي



HtmlAgilityPack (HAP) هي المكتبة الأكثر انتشارًا لتحليل HTML في C#. تدعم XPath وLINQ، مما يجعلها مثالية للعمل مع الهياكل الهرمية. تقوم HAP تلقائيًا بتصحيح علامات HTML غير الصحيحة، وهو أمر مفيد بشكل خاص عند تحليل الصفحات "الخام".



التثبيت عبر NuGet:

Install-Package HtmlAgilityPack


مثال: استخراج جميع الروابط من الصفحة

using HtmlAgilityPack;

string url = "https://example.com";var web = new HtmlWeb();var doc = web.Load(url);

var links = doc.DocumentNode.SelectNodes("//a[@href]");if (links != null){ foreach (var link in links) { string href = link.GetAttributeValue("href", ""); string text = link.InnerText.Trim(); Console.WriteLine($"{text}: {href}"); }}


مثال: استخراج البيانات من جدول

var tableRows = doc.DocumentNode.SelectNodes("//table[@id='data-table']//tr");foreach (var row in tableRows){    var cells = row.SelectNodes("td");    if (cells != null)    {        var rowData = cells.Select(c => c.InnerText.Trim()).ToList();        Console.WriteLine(string.Join(" | ", rowData));    }}


2. AngleSharp — البديل الحديث



AngleSharp هي مكتبة أكثر حداثة، مكتوبة بالكامل بلغة C# وتتوافق مع مواصفات W3C. تدعم محددات CSS، مما يجعلها مريحة لمن اعتادوا على بناء جملة مشابه لـ jQuery. كما يمكن لـ AngleSharp العمل مع DOM وSVG وMathML.



التثبيت عبر NuGet:

Install-Package AngleSharp


مثال: التحليل باستخدام محددات CSS

using AngleSharp;using AngleSharp.Dom;

var config = Configuration.Default.WithDefaultLoader();var context = BrowsingContext.New(config);var document = await context.OpenAsync("https://example.com");

// الحصول على جميع العناصر ذات الفئة "product"var products = document.QuerySelectorAll(".product");foreach (var product in products){ var name = product.QuerySelector(".product-name")?.TextContent.Trim(); var price = product.QuerySelector(".product-price")?.TextContent.Trim(); Console.WriteLine($"{name}: {price}");}


مثال: استخراج JSON من النص البرمجي

var scripts = document.QuerySelectorAll("script[type='application/ld+json']");foreach (var script in scripts){    var json = script.TextContent;    // يمكن بعد ذلك إلغاء تسلسل JSON عبر System.Text.Json    Console.WriteLine(json);}


3. CsQuery — بناء جملة مشابه لـ jQuery



CsQuery هو منفذ jQuery إلى C#، ويوفر واجهة برمجة تطبيقات مألوفة للعمل مع DOM. إنه مناسب بشكل خاص لمن ينتقلون من JavaScript إلى C#. ومع ذلك، تجدر الإشارة إلى أن المشروع يتم تحديثه بشكل أقل من AngleSharp، وقد لا يدعم الإصدارات الأخيرة من .NET.



التثبيت عبر NuGet:

Install-Package CsQuery


مثال: استخراج النص من العناصر

using CsQuery;

string html = "<div class='content'><p>مرحبًا بالعالم!</p></div>";var dom = CQ.Create(html);

var text = dom[".content

توصيات