โปรแกรมขูดเว็บ C#

Web Scraping หรือที่เรียกว่าการรวบรวมข้อมูลเว็บ การเก็บเกี่ยวเว็บ หรือการขูดข้อมูล ใช้สำหรับแยกข้อมูลจากเว็บไซต์ เครื่องมือขูดเว็บใช้ตัวเลือกข้อมูลต่างๆ เช่น ตัวเลือก CSS, XPath หรือทั้งสองอย่างนี้เพื่อดึงข้อมูลจากหน้าเว็บ ตัวเลือกทั้งสองนี้มีประสิทธิภาพในการรวบรวมและวิเคราะห์ข้อมูลจากเว็บ บทความนี้กล่าวถึงวิธีสร้างเว็บสแครปเปอร์ใน C# โดยเฉพาะข้อมูลเกี่ยวกับการนำทาง HTML, XPath Query และ CSS Selector

การกำหนดค่าไลบรารี C# Web Scraping

Aspose.HTML for .NET คือไลบรารีการขูดเว็บที่สามารถกำหนดค่าได้ง่ายๆ โดยดาวน์โหลดไฟล์ DLL อ้างอิงจากส่วน New Releases หรือเรียกใช้คำสั่งการติดตั้ง NuGet ต่อไปนี้ :

PM> Install-Package Aspose.Html

การขูดเว็บด้วยการนำทาง HTML ใน C

คุณสามารถใช้คุณสมบัติต่างๆ ของคลาส Node เพื่อนำทางเอกสาร HTML ข้อมูลโค้ดด้านล่างอธิบายวิธีนำทางเว็บเพจ HTML ใน C#:

// เตรียมรหัส HTML
var html_code = "<span>Hello</span> <span>World!</span>";

// เริ่มต้นเอกสารจากรหัสที่เตรียมไว้
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
    // รับการอ้างอิงถึงลูกคนแรก (ช่วงแรก) ของ BODY
    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 และองค์ประกอบต่างๆ

นอกจากนี้ API ยังมีการใช้คุณสมบัติการข้ามผ่านองค์ประกอบโดยทั่วไป ข้อมูลโค้ดต่อไปนี้สาธิตวิธีการตรวจสอบองค์ประกอบต่างๆ ของ API โดยละเอียด

//โหลดเอกสารจากไฟล์
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     
}

การใช้ตัวกรองแบบกำหนดเองสำหรับ Web Scraper ใน 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 ลูกทั้งหมดจากองค์ประกอบที่มีแอตทริบิวต์ 'คลาส' เท่ากับ 'ความสุข':
    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 ข้อมูลโค้ดด้านล่างอธิบายวิธีการขูดเว็บด้วย 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 ที่แยกองค์ประกอบทั้งหมดที่มีแอตทริบิวต์ 'คลาส' เท่ากับ 'มีความสุข' และองค์ประกอบย่อย 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, XPath Query รวมถึงวิธีการเลือก CSS เพื่อให้บรรลุความต้องการของคุณ อย่างไรก็ตาม ในกรณีที่คุณต้องการหารือเกี่ยวกับข้อกังวลหรือคำถามของคุณ โปรดเขียนถึงเราที่ ฟอรัม

ดูสิ่งนี้ด้วย