Веб-скребок C#

Веб-збирання, також відоме як веб-сканування, веб-збирання або збирання даних, використовується для отримання даних із веб-сайтів. Веб-скребок використовує різні селектори даних, як-от селектори CSS, XPath або обидва з них, щоб отримати дані з веб-сторінок. Обидва ці селектори ефективні для збору та аналізу інформації з Інтернету. У цій статті розповідається про те, як створити веб-скребок у C#, зокрема про навігацію HTML, запит XPath і селектор CSS.

Бібліотека веб-скрапування C#

Aspose.HTML for .NET – це бібліотека для копіювання веб-сайтів, яку можна легко налаштувати, завантаживши довідкові файли DLL із розділу Нові випуски або виконавши наступну команду встановлення NuGet. :

PM> Install-Package Aspose.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, "."))
{
    // Отримайте посилання на першу дитину (перший SPAN) 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 за допомогою Web Scraper у C#

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
    
    // Отримайте перший елемент елемента 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 для створення веб-скребка в 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' яких дорівнює 'happy':
    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, який вилучає всі елементи, атрибут 'class' яких дорівнює 'happy', і їхні дочірні елементи 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, а також методи вибору CSS для досягнення ваших вимог. Однак, якщо вам потрібно обговорити будь-які ваші проблеми чи запитання, напишіть нам на форум.

Дивись також