C# للتحليل: أداة قوية لم تكن تعلم بوجودها

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

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

ابدأ الدورة

تحليل واستخراج البيانات باستخدام C#: عندما لا يكون Python الخيار الوحيد

\n\n

إذا كنت معتادًا على أن التحليل هو اختصاص Python مع مكتبات BeautifulSoup و Scrapy، فلي مفاجأة لك. C# في عالم استخراج بيانات الويب يشبه السكين السويسري: قوي، موثوق، وله شفرات متعددة لم تكن تعلم بوجودها. يفتح التحليل باستخدام C# الأبواب للتكامل مع نظام .NET البيئي، والتطبيقات عالية الأداء، والكتابة الصارمة التي تنقذ من الأخطاء السخيفة أثناء التجميع.

\n\n

في هذه المقالة، سأوضح كيفية استخدام C# لجمع البيانات، وسأشرح أمثلة كود حقيقية، وسأخبرك لماذا يجب كتابة المحلل التالي الخاص بك باستخدام C#، حتى لو لم تفكر في ذلك من قبل.

\n\n

لماذا C# وليس Python؟ ثلاث حجج قوية

\n\n

نعم، Python هو ملك النماذج الأولية. ولكن عندما يتعلق الأمر باستخراج البيانات الصناعي باستخدام C#، ستحصل على:

\n\n
    \n
  • الأداء: يتم تجميع C# إلى كود آلة (عبر JIT أو AOT)، مما يعطي زيادة في السرعة تتراوح بين 2-5 مرات عند تحليل كميات كبيرة من البيانات.
  • \n
  • أمان الأنواع: لن تمرر رقمًا أبدًا حيث يُتوقع سلسلة نصية. سيكتشف المترجم الخطأ قبل التشغيل.
  • \n
  • نظام .NET البيئي: يمكن دمج المحلل المكتوب بـ C# بسهولة في ASP.NET و WPF والأدوات الطرفية وحتى Unity (نعم، يمكن تحليل البيانات من اللعبة).
  • \n
\n\n

والأهم من ذلك، أن C# يتعامل بشكل ممتاز مع المهام التي تتطلب تحليلًا متعدد الخيوط، والعمل مع قواعد البيانات، والمنطق المعقد لاستخراج المعلومات.

\n\n

الأدوات: اختيار مكتبة للتحليل باستخدام C#

\n\n

يبدأ تحليل المواقع باستخدام C# باختيار الأداة الصحيحة. سأذكر ثلاثة مناهج رئيسية تغطي 95% من مهام استخراج الويب.

\n\n

HtmlAgilityPack: كلاسيكيات تحليل HTML

\n\n

هذه هي المكتبة الأكثر شيوعًا للتحليل باستخدام C#. تحول HTML إلى هيكل شجري يسهل التعامل معه عبر XPath أو LINQ. مثالية للصفحات الثابتة.

\n\n
using HtmlAgilityPack;\n\nvar web = new HtmlWeb();\nvar doc = web.Load("https://example.com/articles");\n\n// اختيار جميع العناوين h2 ذات الفئة "title"\nvar titles = doc.DocumentNode\n    .SelectNodes("//h2[@class='title']")\n    .Select(node => node.InnerText.Trim())\n    .ToList();\n\nforeach (var title in titles)\n{\n    Console.WriteLine($"تم العثور على عنوان: {title}");\n}
\n\n

يقوم هذا الكود بتحميل الصفحة، وتحليلها، وجمع العناوين. يمكن لـ HtmlAgilityPack التعامل مع HTML غير المنتظم، وإصلاح العلامات غير المغلقة - وهو أمر شائع في المواقع الحقيقية.

\n\n

AngleSharp: بديل حديث

\n\n

AngleSharp هي مكتبة أحدث تدعم محددات CSS (مثل jQuery) وتعمل مع نموذج DOM. يبدو تحليل البيانات باستخدام C# مع AngleSharp طبيعيًا لمن هم على دراية بـ JavaScript.

\n\n
using AngleSharp;\nusing AngleSharp.Html.Parser;\n\nvar context = BrowsingContext.New(Configuration.Default);\nvar parser = context.GetService<IHtmlParser>();\n\nvar document = await parser.ParseDocumentAsync(htmlString);\nvar prices = document.QuerySelectorAll(".product-price")\n    .Select(el => el.TextContent.Trim())\n    .ToList();
\n\n

AngleSharp مناسبة تمامًا عندما لا تحتاج فقط إلى جمع البيانات، بل أيضًا إلى إجراء عمليات على DOM - مثل استبدال السمات قبل الحفظ.

\n\n

Selenium WebDriver: للمواقع الديناميكية

\n\n

عندما يقوم الموقع بتحميل المحتوى عبر JavaScript (React، Vue، Angular)، لن يساعد المحلل العادي. هنا يأتي دور Selenium. يحاكي عمل المتصفح ويسمح باستخراج البيانات بعد تحميل الصفحة بالكامل.

\n\n
using OpenQA.Selenium;\nusing OpenQA.Selenium.Chrome;\n\nusing (var driver = new ChromeDriver())\n{\n    driver.Navigate().GoToUrl("https://example.com/dynamic-page");\n    \n    // انتظار ظهور العنصر\n    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));\n    wait.Until(d => d.FindEleme                

المدونات

توصيات الكتب