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