تحليل واستخراج البيانات باستخدام 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
والأهم من ذلك، أن C# يتعامل بشكل ممتاز مع المهام التي تتطلب تحليلًا متعدد الخيوط، والعمل مع قواعد البيانات، والمنطق المعقد لاستخراج المعلومات.
\n\nالأدوات: اختيار مكتبة للتحليل باستخدام C#
\n\nيبدأ تحليل المواقع باستخدام C# باختيار الأداة الصحيحة. سأذكر ثلاثة مناهج رئيسية تغطي 95% من مهام استخراج الويب.
\n\nHtmlAgilityPack: كلاسيكيات تحليل HTML
\n\nهذه هي المكتبة الأكثر شيوعًا للتحليل باستخدام C#. تحول HTML إلى هيكل شجري يسهل التعامل معه عبر XPath أو LINQ. مثالية للصفحات الثابتة.
\n\nusing 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\nAngleSharp: بديل حديث
\n\nAngleSharp هي مكتبة أحدث تدعم محددات CSS (مثل jQuery) وتعمل مع نموذج DOM. يبدو تحليل البيانات باستخدام C# مع AngleSharp طبيعيًا لمن هم على دراية بـ JavaScript.
\n\nusing 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\nAngleSharp مناسبة تمامًا عندما لا تحتاج فقط إلى جمع البيانات، بل أيضًا إلى إجراء عمليات على DOM - مثل استبدال السمات قبل الحفظ.
\n\nSelenium WebDriver: للمواقع الديناميكية
\n\nعندما يقوم الموقع بتحميل المحتوى عبر JavaScript (React، Vue، Angular)، لن يساعد المحلل العادي. هنا يأتي دور Selenium. يحاكي عمل المتصفح ويسمح باستخراج البيانات بعد تحميل الصفحة بالكامل.
\n\nusing 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