Pengikis Web C#

Pengikisan Web, juga dikenal sebagai perayapan web, pemanenan web, atau pengikisan data, digunakan untuk mengekstraksi data dari situs web. Pengikis web menggunakan pemilih data yang berbeda seperti pemilih CSS, XPath, atau keduanya untuk mengekstrak data dari halaman web. Kedua penyeleksi ini efisien untuk mengumpulkan dan menganalisis informasi dari web. Artikel ini membahas cara membuat pengikis web di C#, khususnya informasi tentang navigasi HTML, Kueri XPath, dan Pemilih CSS.

Konfigurasi Perpustakaan Scraping Web C

Aspose.HTML for .NET adalah pustaka pengikisan web yang dapat dikonfigurasi dengan mudah dengan mengunduh file DLL referensi dari bagian Rilis Baru, atau menjalankan perintah penginstalan NuGet berikut :

PM> Install-Package Aspose.Html

Pengikisan Web dengan Navigasi HTML di C#

Anda dapat menggunakan properti berbeda dari kelas Node untuk menavigasi dokumen HTML. Cuplikan kode di bawah ini menjelaskan cara menavigasi halaman web HTML di C#:

// Siapkan kode HTML
var html_code = "<span>Hello</span> <span>World!</span>";

// Inisialisasi dokumen dari kode yang disiapkan
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
    // Dapatkan referensi ke anak pertama (SPAN pertama) dari BODY
    var element = document.Body.FirstChild;
    Console.WriteLine(element.TextContent); // output: Hello

    // Dapatkan referensi ke spasi putih di antara elemen html
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: ' '

    // Dapatkan referensi ke elemen SPAN kedua
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: World!
}

Inspeksi Dokumen HTML dan Elemennya

API juga menyediakan penggunaan fitur traversal elemen secara umum. Cuplikan kode berikut menunjukkan cara melakukan pemeriksaan mendetail terhadap berbagai elemen API.

//Muat dokumen dari file
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");

// Tentukan jalur ke file HTML sumber di sistem file lokal Anda
using (var document = new Aspose.Html.HTMLDocument(documentPath))
{
    // Dapatkan elemen html dari dokumen tersebut
    var element = document.DocumentElement;                
    Console.WriteLine(element.TagName); // HTML
    
    // Dapatkan elemen terakhir dari elemen html
    element = element.LastElementChild;
    Console.WriteLine(element.TagName); // BODY
    
    // Dapatkan elemen pertama dari elemen tubuh
    element = element.FirstElementChild;
    Console.WriteLine(element.TagName); // H1
    Console.WriteLine(element.TextContent); // Header 1     
}

Penggunaan Filter Kustom untuk Scraper Web di C#

Anda dapat menerapkan filter khusus menggunakan objek antarmuka ITreeWalker atau INodeIterator bersama dengan penerapan filter khusus. Cuplikan kode berikut menjelaskan cara mengikuti proses:

class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
    public override short AcceptNode(Aspose.Html.Dom.Node n)
    {
        // Filter saat ini melewatkan semua elemen, kecuali elemen IMG.
        return string.Equals("img", n.LocalName)
            ? FILTER_ACCEPT
            : FILTER_SKIP;
    }
}

Setelah menerapkan filter ubahsuaian, Anda dapat menavigasi laman web dengan cepat menggunakan kode berikut:

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

// Inisialisasi dokumen berdasarkan kode yang disiapkan
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Untuk memulai navigasi HTML, kita perlu membuat instance TreeWalker.
    // Parameter yang ditentukan berarti mulai berjalan dari akar dokumen, mengulangi semua node dan menggunakan penerapan filter khusus kami
    using (var iterator = document.CreateTreeWalker(document, Aspose.Html.Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
    {         
        while (iterator.NextNode() != null)
        {
            // Karena kami menggunakan filter kami sendiri, simpul saat ini akan selalu menjadi turunan dari HTMLImageElement.
            // Jadi, kami tidak memerlukan validasi tambahan di sini.
            var image = (Aspose.Html.HTMLImageElement)iterator.CurrentNode;

            System.Console.WriteLine(image.Src);
            // keluaran: image1.png
            // keluaran: image2.png
        }
    }
}

Pengikisan Web menggunakan Kueri XPath di C#

XPath dapat digunakan untuk mengekstrak data dari dokumen HTML. Cuplikan kode berikut menjelaskan cara menggunakan Permintaan XPath untuk pengikisan Web di C#:

// Siapkan kode HTML
var code = @"
    <div class='happy'>
        <div>
            <span>Hello!</span>
        </div>
    </div>
    <p class='happy'>
        <span>World</span>
    </p>
";

// Inisialisasi dokumen berdasarkan kode yang disiapkan
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Di sini kami mengevaluasi ekspresi XPath di mana kami memilih semua elemen anak SPAN dari elemen yang atribut 'class'-nya sama dengan 'happy':
    var result = document.Evaluate("//*[@class='happy']//span",
        document,
        null,
        Aspose.Html.Dom.XPath.XPathResultType.Any,
        null);

    // Ulangi node yang dihasilkan
   for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
    {
        System.Console.WriteLine(node.TextContent);
        // keluaran: Halo
        // keluaran: Dunia!
    }
}

Pengikisan Web dengan Pemilih CSS di C#

Anda dapat membuat pola pencarian untuk mencocokkan elemen dalam pohon dokumen berdasarkan sintaks Pemilih CSS. Cuplikan kode di bawah ini menjelaskan cara melakukan web scraping dengan CSS Selector di C#:

// Siapkan kode HTML
var code = @"
    <div class='happy'>
        <div>
            <span>Hello</span>
        </div>
    </div>
    <p class='happy'>
        <span>World!</span>
    </p>
";

// Inisialisasi dokumen berdasarkan kode yang disiapkan
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Di sini kita membuat Pemilih CSS yang mengekstrak semua elemen yang atribut 'kelasnya' sama dengan 'bahagia' dan elemen SPAN anaknya
    var elements = document.QuerySelectorAll(".happy span");

    // Ulangi daftar elemen yang dihasilkan
    foreach (Aspose.Html.HTMLElement element in elements)
    {
        System.Console.WriteLine(element.InnerHTML);
        // keluaran: Halo
        // keluaran: Dunia!
    }
}

Dapatkan Lisensi Gratis

Anda dapat meminta lisensi sementara gratis untuk mengevaluasi API dalam kapasitas penuhnya.

Kesimpulan

Pada artikel ini, Anda telah mempelajari tentang pustaka pengikis web C#, Aspose.HTML for .NET, yang menyertakan beberapa metode untuk membuat pengikis web di C#. Ini membahas Navigasi HTML, Kueri XPath, serta metode pemilih CSS untuk mencapai kebutuhan Anda. Namun, jika Anda perlu mendiskusikan masalah atau pertanyaan Anda, silakan kirim email kepada kami di forum.

Lihat juga