C# kullanarak Web Scraping

Web Scraping, web sitelerinden veri çıkarmak için kullanılan bir tekniktir. Web sitelerinden ve HTML dosyalarından veri çıkarma işleminin otomatikleştirilmesine yardımcı olur. Bir C# geliştiricisi olarak web sayfalarındaki resim, video, ses vb. verileri kolayca inceleyebilir, yakalayabilir ve çıkarabiliriz. Bu makalede, C# kullanarak HTML ayrıştırma ile web kazımanın nasıl gerçekleştirileceğini öğreneceğiz.

Bu makalede aşağıdaki konular ele alınacaktır:

C# Web Kazıma API’si

HTML dosyalarından veya URL’lerden web kazıma için Aspose.HTML for .NET API’sini kullanacağız. Herhangi bir harici yazılım olmadan HTML belgelerinin oluşturulmasına, değiştirilmesine, veri çıkarılmasına, dönüştürülmesine ve işlenmesine olanak tanıyan gelişmiş bir HTML işleme API’sidir. Lütfen API’nin DLL dosyasını indirin veya NuGet kullanarak yükleyin.

PM> Install-Package Aspose.Html

C# kullanarak HTML’yi okuyun ve çıkarın

Aşağıdaki adımları izleyerek herhangi bir HTML belgesinden HTML okuyabilir ve çıkartabiliriz:

  1. HTMLDocument sınıfını kullanarak bir HTML belgesi yükleyin.
  2. Dosyanın iç HTML’sini konsolda görüntüleyin.

Aşağıdaki kod örneği, C# kullanarak HTML içeriğinin nasıl okunacağını ve ayıklanacağını gösterir.

// Bu kod örneği, HTML belgesinin içeriğinin nasıl gösterileceğini gösterir
// HTML belgesini yükle
var document = new HTMLDocument(@"D:\Files\html\input.html");

// Belgenin iç HTML'sini göster
Console.WriteLine(document.Body.InnerHTML);
C# kullanarak HTML'yi okuyun ve çıkarın.

C# kullanarak HTML’yi okuyun ve çıkarın.

Benzer şekilde, aşağıda gösterildiği gibi canlı web sitelerinden HTML okuyabilir ve çıkartabiliriz:

// Bu kod örneği, canlı web sitesi URL'sinden içeriklerin nasıl gösterileceğini gösterir.
// URL'yi Başlat
Url url = new Url("https://en.wikipedia.org/wiki/HTML");

// URL örneğini kullanarak HTML dosyasını yükleyin
HTMLDocument document = new HTMLDocument(url);

// Dosyanın iç HTML'sini konsola göster
Console.WriteLine(document.Body.InnerHTML);

C# kullanarak Belge Öğelerini İnceleme

Aşağıda verilen adımları takip ederek belgeyi ve unsurlarını inceleyebiliriz:

  1. HTMLDocument sınıfını kullanarak bir HTML belgesi yükleyin.
  2. Belgenin HTML öğesini alın.
  3. HTML öğesinin ilk/son öğelerini alın.
  4. TagName, TextContent gibi öğe ayrıntılarını görüntüleyin.

Aşağıdaki kod örneği, C# kullanarak belge öğelerinin nasıl inceleneceğini gösterir.

// Bu kod örneği, HTML öğelerinin nasıl inceleneceğini gösterir.
// Dosyadan belge yükleme
string documentPath = @"D:\Files\html\input.html";
HTMLDocument document = new 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#’ta Filtreleri Kullanarak Belirli Öğeyi Bulma

Tüm görselleri, bağlantıları vb. almak gibi belirli bir öğeyi bulmak için özel filtreler kullanabiliriz. Bu amaçla API, TreeWalker arayüzünü sağlar. WhatToShow bayrakları ve filtreleri (varsa) tarafından tanımlanan belgenin görünümünü kullanarak bir belge ağacında veya alt ağacında gezinmeye olanak tanır. Aşağıda verilen adımları izleyerek filtreleri kullanarak belirli öğeleri bulabiliriz:

  1. NodeFilter sınıfını kullanarak filtreleri tanımlayın ve AcceptNode() yöntemini geçersiz kılın.
  2. HTMLDocument sınıfını kullanarak bir HTML belgesi yükleyin.
  3. CreateTreeWalker() yöntemini çağırın. Bağımsız değişken olarak kök düğümü, neyin gösterileceğini ve NodeFilter’ı alır.

Aşağıdaki kod örneği, C# kullanarak belirli öğelerin nasıl bulunacağını gösterir.

// Bu kod örneği, filtreler kullanılarak verilerin nasıl sorgulanacağını gösterir.
// Bir HTML belgesi yükleyin
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");

// HTML navigasyonunu başlatmak için TreeWalker'ın bir örneğini oluşturmamız gerekiyor.
// Belirtilen parametreler, belgenin kökünden yürümeye başladığı anlamına gelir,
// tüm düğümleri yinelemek ve özel filtre uygulamamızı kullanmak
using (var iterator = document.CreateTreeWalker(document, 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 = (HTMLImageElement)iterator.CurrentNode;

        System.Console.WriteLine(image.Src);
        // çıktı: image1.png
        // çıktı: image2.png
    }
}
// Bu kod örneği, Node filtresinin nasıl tanımlanacağını gösterir.
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;
    }
}

C# kullanarak HTML’den Veri Sorgulama

Aşağıdaki adımları izleyerek bir HTML belgesinden veri sorgulamak için XPath Query’yi de kullanabiliriz:

  1. HTMLDocument sınıfını kullanarak bir HTML belgesi yükleyin.
  2. Evaluate() yöntemini çağırın. Bağımsız değişken olarak XPath ifade dizesini, belgeyi ve türünü alır.
  3. Son olarak, ortaya çıkan düğümler arasında döngü yapın ve metni görüntüleyin

Aşağıdaki kod örneği, C# kullanarak XPath sorgularıyla verilerin nasıl sorgulanacağını gösterir.

// Bu kod örneği, XPath sorgusu kullanılarak verilerin nasıl sorgulanacağını gösterir.
// Bir HTML kodu hazırlayın
var code = @"
    <div class='happy'>
        <div>
            <span>Hello!</span>
        </div>
    </div>
    <p class='happy'>
        <span>World</span>
    </p>
";

// Hazırlanan koda göre bir belgeyi başlatın
HTMLDocument document = new HTMLDocument(code, ".");

// Burada tüm alt SPAN elemanlarını seçtiğimiz XPath ifadesini değerlendiriyoruz. 
// 'sınıf' niteliği 'mutlu'ya eşit olan öğelerden:
var result = document.Evaluate("//*[@class='happy']//span",
    document,
    null,
    Aspose.Html.Dom.XPath.XPathResultType.Any,
    null);

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

C#’ta CSS Seçiciyi kullanarak ayıklama

HTML içeriğini CSS seçicileri kullanarak da çıkarabiliriz. Bu amaçla API, bir HTML belgesinde gezinmeye izin veren ve gerekli öğeleri arayan QuerySelectorAll() yöntemini sağlar. Sorgu seçiciyi parametre olarak alır ve tüm öğelerin eşleşen NodeList’ini döndürür. Aşağıdaki adımları takip ederek CSS seçicileri kullanarak sorgulama yapabiliriz:

  1. HTMLDocument sınıfını kullanarak bir HTML belgesi yükleyin.
  2. QuerySelectorAll() yöntemini çağırın. Sorgu seçiciyi argüman olarak alır.
  3. Son olarak, ortaya çıkan öğe listesi boyunca döngü yapın.

Aşağıdaki kod örneği, C#’ta CSS seçicileri kullanılarak HTML içeriğinin nasıl çıkarılacağını gösterir.

// Hazırlanan koda göre bir belgeyi başlatın
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");

// Burada tüm div öğelerini çıkaran bir CSS Seçici oluşturuyoruz
var elements = document.QuerySelectorAll("div");

// Sonuçta ortaya çıkan öğe listesi üzerinde yineleme yapın
foreach (Aspose.Html.HTMLElement element in elements)
{
    System.Console.WriteLine(element.InnerHTML);
}

Ücretsiz Lisans Alın

Lütfen ücretsiz bir geçici lisans talep ederek API’yi değerlendirme sınırlamaları olmadan deneyin.

Çözüm

Bu makalede şunların nasıl yapılacağını öğrendik:

  • C# kullanarak bir HTML belgesinin içeriğini okuyun ve çıkarın;
  • Belge Öğelerini inceleyin ve HTML’den belirli bir öğeyi bulun;
  • CSS Seçici’yi kullanarak sorguya özgü verileri ve verileri çıkarın.

Ayrıca, belgeleri kullanarak Aspose.HTML for .NET API hakkında daha fazla bilgi edinebilirsiniz. Herhangi bir belirsizlik durumunda lütfen forum üzerinden bizimle iletişime geçmekten çekinmeyin.

Ayrıca bakınız