Trình quét web C#

Web Scraping, còn được gọi là thu thập dữ liệu web, thu thập web hoặc thu thập dữ liệu, được sử dụng để trích xuất dữ liệu từ các trang web. Trình duyệt web sử dụng các bộ chọn dữ liệu khác nhau như bộ chọn CSS, XPath hoặc cả hai bộ này để trích xuất dữ liệu từ các trang web. Cả hai bộ chọn này đều hiệu quả để thu thập và phân tích thông tin từ web. Bài viết này trình bày cách tạo trình duyệt web trong C#, cụ thể là thông tin về điều hướng HTML, Truy vấn XPath và Bộ chọn CSS.

Cấu hình Thư viện Scraping Web C#

Aspose.HTML for .NET là một thư viện duyệt web có thể dễ dàng được định cấu hình bằng cách tải xuống tệp DLL tham chiếu từ phần Bản phát hành mới hoặc chạy lệnh cài đặt NuGet sau :

PM> Install-Package Aspose.Html

Web Scraping với HTML Navigation trong C#

Bạn có thể sử dụng các thuộc tính khác nhau của lớp Node để điều hướng các tài liệu HTML. Đoạn mã bên dưới giải thích cách điều hướng một trang web HTML trong C#:

// Chuẩn bị mã HTML
var html_code = "<span>Hello</span> <span>World!</span>";

// Khởi tạo tài liệu từ mã đã chuẩn bị
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
    // Lấy tham chiếu đến con đầu tiên (SPAN đầu tiên) của BODY
    var element = document.Body.FirstChild;
    Console.WriteLine(element.TextContent); // output: Hello

    // Nhận tham chiếu đến khoảng trắng giữa các phần tử html
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: ' '

    // Nhận tham chiếu đến phần tử SPAN thứ hai
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: World!
}

Kiểm tra tài liệu HTML và các phần tử của nó

API cũng cung cấp cách sử dụng tổng quát các tính năng truyền tải phần tử. Đoạn mã sau đây trình bày cách thực hiện kiểm tra chi tiết các phần tử khác nhau của API.

//Tải tài liệu từ một tệp
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");

// Chỉ định đường dẫn đến tệp HTML nguồn trong hệ thống tệp cục bộ của bạn
using (var document = new Aspose.Html.HTMLDocument(documentPath))
{
    // Lấy phần tử html của tài liệu
    var element = document.DocumentElement;                
    Console.WriteLine(element.TagName); // HTML
    
    // Lấy phần tử cuối cùng của phần tử html
    element = element.LastElementChild;
    Console.WriteLine(element.TagName); // BODY
    
    // Lấy phần tử đầu tiên của phần tử body
    element = element.FirstElementChild;
    Console.WriteLine(element.TagName); // H1
    Console.WriteLine(element.TextContent); // Header 1     
}

Cách sử dụng bộ lọc tùy chỉnh cho Web Scraper trong C#

Bạn có thể triển khai bộ lọc tùy chỉnh bằng cách sử dụng đối tượng giao diện ITreeWalker hoặc INodeIterator cùng với triển khai bộ lọc tùy chỉnh. Đoạn mã sau giải thích cách thực hiện theo quy trình:

class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
    public override short AcceptNode(Aspose.Html.Dom.Node n)
    {
        // Bộ lọc hiện tại bỏ qua tất cả các phần tử, ngoại trừ các phần tử IMG.
        return string.Equals("img", n.LocalName)
            ? FILTER_ACCEPT
            : FILTER_SKIP;
    }
}

Sau khi triển khai bộ lọc tùy chỉnh, bạn có thể nhanh chóng điều hướng trang web bằng mã sau:

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

// Khởi tạo tài liệu dựa trên mã đã chuẩn bị
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Để bắt đầu điều hướng HTML, chúng ta cần tạo một phiên bản của TreeWalker.
    // Các tham số được chỉ định có nghĩa là nó bắt đầu đi bộ từ gốc của tài liệu, lặp lại tất cả các nút và sử dụng triển khai bộ lọc tùy chỉnh của chúng tôi
    using (var iterator = document.CreateTreeWalker(document, Aspose.Html.Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
    {         
        while (iterator.NextNode() != null)
        {
            // Vì chúng tôi đang sử dụng bộ lọc của riêng mình, nút hiện tại sẽ luôn là một phiên bản của HTMLImageElement.
            // Vì vậy, chúng tôi không cần xác nhận bổ sung ở đây.
            var image = (Aspose.Html.HTMLImageElement)iterator.CurrentNode;

            System.Console.WriteLine(image.Src);
            // đầu ra: image1.png
            // đầu ra: image2.png
        }
    }
}

Web Scraping bằng cách sử dụng XPath Query trong C#

XPath có thể được sử dụng để trích xuất dữ liệu từ các tài liệu HTML. Đoạn mã sau đây trình bày chi tiết cách sử dụng Truy vấn XPath để tìm kiếm Web trong C#:

// Chuẩn bị mã HTML
var code = @"
    <div class='happy'>
        <div>
            <span>Hello!</span>
        </div>
    </div>
    <p class='happy'>
        <span>World</span>
    </p>
";

// Khởi tạo tài liệu dựa trên mã đã chuẩn bị
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Ở đây chúng tôi đánh giá biểu thức XPath trong đó chúng tôi chọn tất cả các phần tử SPAN con từ các phần tử có thuộc tính 'class' bằng 'happy':
    var result = document.Evaluate("//*[@class='happy']//span",
        document,
        null,
        Aspose.Html.Dom.XPath.XPathResultType.Any,
        null);

    // Lặp lại các nút kết quả
   for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
    {
        System.Console.WriteLine(node.TextContent);
        // đầu ra: Xin chào
        // đầu ra: Thế giới!
    }
}

Web Scraping với CSS Selector trong C#

Bạn có thể tạo mẫu tìm kiếm để khớp các phần tử trong cây tài liệu dựa trên cú pháp Bộ chọn CSS. Đoạn mã bên dưới giải thích cách thực hiện quét web bằng Công cụ chọn CSS trong C#:

// Chuẩn bị mã HTML
var code = @"
    <div class='happy'>
        <div>
            <span>Hello</span>
        </div>
    </div>
    <p class='happy'>
        <span>World!</span>
    </p>
";

// Khởi tạo tài liệu dựa trên mã đã chuẩn bị
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Ở đây chúng tôi tạo Bộ chọn CSS trích xuất tất cả các phần tử có thuộc tính 'class' bằng 'happy' và các phần tử SPAN con của chúng
    var elements = document.QuerySelectorAll(".happy span");

    // Lặp lại danh sách các phần tử đã kết quả
    foreach (Aspose.Html.HTMLElement element in elements)
    {
        System.Console.WriteLine(element.InnerHTML);
        // đầu ra: Xin chào
        // đầu ra: Thế giới!
    }
}

Nhận giấy phép miễn phí

Bạn có thể yêu cầu giấy phép tạm thời miễn phí để đánh giá API trong toàn bộ năng lực của nó.

Sự kết luận

Trong bài viết này, bạn đã tìm hiểu về thư viện quét web C#, Aspose.HTML for .NET, bao gồm một số phương pháp để tạo trình duyệt web trong C#. Nó thảo luận về Điều hướng HTML, Truy vấn XPath, cũng như phương pháp bộ chọn CSS để đạt được yêu cầu của bạn. Tuy nhiên, trong trường hợp bạn cần thảo luận về bất kỳ mối quan tâm hoặc câu hỏi nào của mình, vui lòng viết thư cho chúng tôi tại diễn đàn.

Xem thêm