مكشطة الويب C#

يتم استخدام Web Scraping ، المعروف أيضًا باسم زحف الويب أو حصاد الويب أو تجريف البيانات ، لاستخراج البيانات من مواقع الويب. يستخدم مكشطة الويب محددات بيانات مختلفة مثل محددات CSS أو XPath أو كليهما لاستخراج البيانات من صفحات الويب. كل من هذين المحددين فعالين في جمع المعلومات وتحليلها من الويب. تتناول هذه المقالة كيفية إنشاء مكشطة ويب في C# ، وتحديداً المعلومات حول التنقل عبر HTML و XPath Query و CSS Selector.

تكوين مكتبة كشط الويب C#

Aspose.HTML for .NET عبارة عن مكتبة كشط على الويب يمكن تهيئتها بسهولة عن طريق تنزيل ملفات DLL المرجعية من قسم الإصدارات الجديدة ، أو تشغيل أمر التثبيت التالي NuGet :

PM> Install-Package Aspose.Html

تجريف الويب باستخدام التنقل بتنسيق HTML في C#

يمكنك استخدام خصائص مختلفة لفئة عقدة للتنقل في مستندات HTML. يوضح مقتطف الشفرة أدناه كيفية التنقل في صفحة ويب HTML في C#:

// تحضير كود HTML
var html_code = "<span>Hello</span> <span>World!</span>";

// قم بتهيئة مستند من الكود المعد
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
    // احصل على الإشارة إلى الطفل الأول (أول سبان) من الجسم
    var element = document.Body.FirstChild;
    Console.WriteLine(element.TextContent); // output: Hello

    // احصل على مرجع للمسافة البيضاء بين عناصر html
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: ' '

    // احصل على المرجع لعنصر SPAN الثاني
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: World!
}

فحص مستند HTML وعناصره

توفر واجهة برمجة التطبيقات أيضًا الاستخدام العام لميزات اجتياز العناصر. يوضح مقتطف الشفرة التالي كيفية إجراء فحص تفصيلي للعناصر المختلفة لواجهة برمجة التطبيقات.

//قم بتحميل مستند من ملف
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");

// حدد المسار إلى ملف HTML المصدر في نظام الملفات المحلي لديك
using (var document = new Aspose.Html.HTMLDocument(documentPath))
{
    // احصل على عنصر html الخاص بالمستند
    var element = document.DocumentElement;                
    Console.WriteLine(element.TagName); // HTML
    
    // احصل على العنصر الأخير من عنصر html
    element = element.LastElementChild;
    Console.WriteLine(element.TagName); // BODY
    
    // احصل على العنصر الأول من عنصر الجسم
    element = element.FirstElementChild;
    Console.WriteLine(element.TagName); // H1
    Console.WriteLine(element.TextContent); // Header 1     
}

استخدام عامل التصفية المخصص لمكشطة الويب في C#

يمكنك تنفيذ عامل تصفية مخصص باستخدام ITreeWalker أو كائن واجهة INodeIterator جنبًا إلى جنب مع تطبيق مرشح مخصص. يوضح مقتطف الشفرة التالي كيفية متابعة العملية:

class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
    public override short AcceptNode(Aspose.Html.Dom.Node n)
    {
        // يتخطى المرشح الحالي كل العناصر ، باستثناء عناصر IMG.
        return string.Equals("img", n.LocalName)
            ? FILTER_ACCEPT
            : FILTER_SKIP;
    }
}

بعد تنفيذ عامل تصفية مخصص ، يمكنك التنقل بسرعة في صفحة ويب باستخدام الكود التالي:

var code = @"
    <p>Hello</p>
    <img src='image1.png'>
    <img src='image2.png'>
    <p>World!</p>";

// قم بتهيئة مستند بناءً على الكود المعد
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // لبدء التنقل عبر HTML ، نحتاج إلى إنشاء مثيل لـ TreeWalker.
    // تعني المعلمات المحددة أنها تبدأ في السير من جذر المستند ، وتكرار جميع العقد واستخدام تطبيقنا المخصص للمرشح
    using (var iterator = document.CreateTreeWalker(document, Aspose.Html.Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
    {         
        while (iterator.NextNode() != null)
        {
            // نظرًا لأننا نستخدم عامل التصفية الخاص بنا ، فستكون العقدة الحالية دائمًا مثيلًا لـ HTMLImageElement.
            // لذلك ، لسنا بحاجة إلى عمليات التحقق الإضافية هنا.
            var image = (Aspose.Html.HTMLImageElement)iterator.CurrentNode;

            System.Console.WriteLine(image.Src);
            // الإخراج: image1.png
            // الإخراج: image2.png
        }
    }
}

تجريف الويب باستخدام XPath Query في C#

يمكن استخدام XPath لاستخراج البيانات من مستندات HTML. يوضح مقتطف الكود التالي كيفية استخدام XPath Query لكشط الويب في C#:

// تحضير كود HTML
var code = @"
    <div class='happy'>
        <div>
            <span>Hello!</span>
        </div>
    </div>
    <p class='happy'>
        <span>World</span>
    </p>
";

// قم بتهيئة مستند بناءً على الكود المعد
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // نقوم هنا بتقييم تعبير XPath حيث نختار جميع عناصر SPAN التابعة من العناصر التي تساوي سمة "class" الخاصة بها "سعيد":
    var result = document.Evaluate("//*[@class='happy']//span",
        document,
        null,
        Aspose.Html.Dom.XPath.XPathResultType.Any,
        null);

    // كرر على العقد الناتجة
   for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
    {
        System.Console.WriteLine(node.TextContent);
        // الإخراج: مرحبًا
        // الإخراج: العالم!
    }
}

تجريف الويب باستخدام CSS Selector في C#

يمكنك إنشاء نمط بحث لمطابقة العناصر الموجودة في شجرة المستند بناءً على بنية CSS Selectors. يوضح مقتطف الشفرة أدناه كيفية إجراء تجريف الويب باستخدام CSS Selector في C#:

// تحضير كود HTML
var code = @"
    <div class='happy'>
        <div>
            <span>Hello</span>
        </div>
    </div>
    <p class='happy'>
        <span>World!</span>
    </p>
";

// قم بتهيئة مستند بناءً على الكود المعد
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // نقوم هنا بإنشاء محدد CSS يستخرج جميع العناصر التي تساوي سمة "class" الخاصة بها "سعيد" وعناصر SPAN التابعة لها
    var elements = document.QuerySelectorAll(".happy span");

    // كرر على قائمة العناصر الناتجة
    foreach (Aspose.Html.HTMLElement element in elements)
    {
        System.Console.WriteLine(element.InnerHTML);
        // الإخراج: مرحبًا
        // الإخراج: العالم!
    }
}

احصل على ترخيص مجاني

يمكنك طلب ترخيص مؤقت مجاني لتقييم API بكامل طاقتها.

استنتاج

في هذه المقالة ، تعرفت على مكتبة كشط الويب C# ، Aspose.HTML for .NET ، والتي تتضمن عدة طرق لإنشاء مكشطة ويب في C#. يناقش HTML Navigation و XPath Query بالإضافة إلى طريقة محدد CSS لتحقيق متطلباتك. ومع ذلك ، في حال احتجت إلى مناقشة أي من مخاوفك أو أسئلتك ، يرجى مراسلتنا على المنتدى.

أنظر أيضا