Web Kazıyıcı C#

Web tarama, web toplama veya veri kazıma olarak da bilinen Web Scraping, web sitelerinden veri çıkarmak için kullanılır. Bir web kazıyıcı, web sayfalarından veri çıkarmak için CSS seçicileri, XPath veya bunların her ikisi gibi farklı veri seçicileri kullanır. Bu seçicilerin her ikisi de web’den bilgi toplamak ve analiz etmek için etkilidir. Bu makale, C# dilinde bir web kazıyıcının nasıl oluşturulacağını, özellikle HTML gezintisi, XPath Sorgusu ve CSS Seçici hakkındaki bilgileri kapsar.

C# Web Kazıma Kitaplığı Yapılandırması

Aspose.HTML for .NET, Yeni Çıkanlar bölümünden referans DLL dosyaları indirilerek veya aşağıdaki NuGet kurulum komutu çalıştırılarak kolayca yapılandırılabilen bir web kazıma kitaplığıdır. :

PM> Install-Package Aspose.Html

C#’ta HTML Gezintisi ile Web Scraping

HTML belgelerinde gezinmek için Node sınıfının farklı özelliklerini kullanabilirsiniz. Aşağıdaki kod parçacığı, C# dilinde bir HTML web sayfasında nasıl gezinileceğini açıklar:

// HTML kodunu hazırlayın
var html_code = "<span>Hello</span> <span>World!</span>";

// Hazırlanan koddan bir belge başlat
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
    // BODY'nin ilk çocuğuna (ilk SPAN) referans alın
    var element = document.Body.FirstChild;
    Console.WriteLine(element.TextContent); // output: Hello

    // Html öğeleri arasındaki boşluk referansını alın
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: ' '

    // İkinci SPAN öğesinin referansını alın
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: World!
}

HTML Belgesinin ve Öğelerinin İncelenmesi

API ayrıca öğe geçiş özelliklerinin genelleştirilmiş kullanımını da sağlar. Aşağıdaki kod parçacığı, API’nin farklı öğelerinin ayrıntılı bir incelemesinin nasıl gerçekleştirileceğini gösterir.

//Bir dosyadan belge yükleme
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");

// Yerel dosya sisteminizde kaynak HTML dosyasının yolunu belirtin
using (var document = new Aspose.Html.HTMLDocument(documentPath))
{
    // Belgenin html öğesini alın
    var element = document.DocumentElement;                
    Console.WriteLine(element.TagName); // HTML
    
    // Html öğesinin son öğesini alın
    element = element.LastElementChild;
    Console.WriteLine(element.TagName); // BODY
    
    // Gövde öğesinin ilk öğesini alın
    element = element.FirstElementChild;
    Console.WriteLine(element.TagName); // H1
    Console.WriteLine(element.TextContent); // Header 1     
}

C# Web Kazıyıcı için Özel Filtre Kullanımı

Bir ITreeWalker veya bir INodeIterator arayüz nesnesi ile birlikte özel bir filtre uygulaması kullanarak özel bir filtre uygulayabilirsiniz. Aşağıdaki kod parçacığı, işlemin nasıl izleneceğini açıklar:

class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
    public override short AcceptNode(Aspose.Html.Dom.Node n)
    {
        // Geçerli filtre, IMG öğeleri dışındaki tüm öğeleri atlar.
        return string.Equals("img", n.LocalName)
            ? FILTER_ACCEPT
            : FILTER_SKIP;
    }
}

Özel bir filtre uyguladıktan sonra, aşağıdaki kodla bir web sayfasında hızlıca gezinebilirsiniz:

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

// Hazırlanan koda dayalı olarak bir belgeyi başlatın
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // HTML gezintisini başlatmak için bir TreeWalker örneği oluşturmamız gerekiyor.
    // Belirtilen parametreler, belgenin kökünden yürümeye başladığı, tüm düğümleri yinelediği ve özel filtre uygulamamızı kullandığı anlamına gelir.
    using (var iterator = document.CreateTreeWalker(document, Aspose.Html.Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
    {         
        while (iterator.NextNode() != null)
        {
            // Kendi filtremizi kullandığımız için geçerli düğüm her zaman HTMLImageElement'in bir örneği olacaktır.
            // Dolayısıyla, burada ek doğrulamalara ihtiyacımız yok.
            var image = (Aspose.Html.HTMLImageElement)iterator.CurrentNode;

            System.Console.WriteLine(image.Src);
            // çıktı: image1.png
            // çıktı: image2.png
        }
    }
}

C#’ta XPath Sorgusu Kullanarak Web Scraping

XPath, HTML belgelerinden veri çıkarmak için kullanılabilir. Aşağıdaki kod parçacığı, C#’ta Web scraping için XPath Query’nin nasıl kullanılacağını detaylandırır:

// HTML kodunu hazırlayın
var code = @"
    <div class='happy'>
        <div>
            <span>Hello!</span>
        </div>
    </div>
    <p class='happy'>
        <span>World</span>
    </p>
";

// Hazırlanan koda dayalı olarak bir belgeyi başlatın
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Burada, 'class' özniteliği 'happy' değerine eşit olan öğelerden tüm alt SPAN öğelerini seçtiğimiz XPath ifadesini değerlendiriyoruz:
    var result = document.Evaluate("//*[@class='happy']//span",
        document,
        null,
        Aspose.Html.Dom.XPath.XPathResultType.Any,
        null);

    // Ortaya çıkan düğümler üzerinde yineleme yapın
   for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
    {
        System.Console.WriteLine(node.TextContent);
        // çıktı: Merhaba
        // çıktı: Dünya!
    }
}

C#’ta CSS Seçici ile Web Scraping

Belge ağacındaki öğeleri eşleştirmek için CSS Seçici sözdizimine dayalı bir arama modeli oluşturabilirsiniz. Aşağıdaki kod parçacığı, C# dilinde CSS Seçici ile web kazımanın nasıl gerçekleştirileceğini açıklar:

// HTML kodunu hazırlayın
var code = @"
    <div class='happy'>
        <div>
            <span>Hello</span>
        </div>
    </div>
    <p class='happy'>
        <span>World!</span>
    </p>
";

// Hazırlanan koda dayalı olarak bir belge başlatın
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Burada, 'class' özniteliği 'happy' değerine eşit olan tüm öğeleri ve bunların alt SPAN öğelerini ayıklayan bir CSS Seçici oluşturuyoruz.
    var elements = document.QuerySelectorAll(".happy span");

    // Ortaya çıkan öğe listesi üzerinde yineleme yapın
    foreach (Aspose.Html.HTMLElement element in elements)
    {
        System.Console.WriteLine(element.InnerHTML);
        // çıktı: merhaba
        // çıktı: Dünya!
    }
}

Ücretsiz Lisans Alın

API’yi tam kapasitesiyle değerlendirmek için bir ücretsiz geçici lisans talep edebilirsiniz.

Çözüm

Bu makalede, C# dilinde bir web kazıyıcı oluşturmak için çeşitli yöntemler içeren C# web scraping kitaplığı Aspose.HTML for .NET hakkında bilgi edindiniz. Gereksinimlerinizi karşılamak için HTML Gezintisi, XPath Sorgusu ve CSS seçici yöntemini tartışır. Ancak, herhangi bir endişenizi veya sorunuzu tartışmanız gerekirse, lütfen forumdan bize yazın.

Ayrıca bakınız