웹 스크레이퍼 C#

웹 크롤링, 웹 수집 또는 데이터 스크래핑이라고도 하는 웹 스크래핑은 웹 사이트에서 데이터를 추출하는 데 사용됩니다. 웹 스크레이퍼는 웹 페이지에서 데이터를 추출하기 위해 CSS 선택기, XPath 또는 둘 다와 같은 다양한 데이터 선택기를 사용합니다. 이 두 선택기는 웹에서 정보를 수집하고 분석하는 데 효율적입니다. 이 기사에서는 C#에서 웹 스크레이퍼를 만드는 방법, 특히 HTML 탐색, XPath 쿼리 및 CSS 선택기에 대한 정보를 다룹니다.

C# 웹 스크래핑 라이브러리 구성

Aspose.HTML for .NETNew Releases 섹션에서 참조 DLL 파일을 다운로드하거나 다음 NuGet 설치 명령을 실행하여 쉽게 구성할 수 있는 웹 스크래핑 라이브러리입니다. :

PM> Install-Package Aspose.Html

C#에서 HTML 탐색을 사용한 웹 스크래핑

Node 클래스의 다른 속성을 사용하여 HTML 문서를 탐색할 수 있습니다. 아래 코드 조각은 C#에서 HTML 웹 페이지를 탐색하는 방법을 설명합니다.

// HTML 코드 준비
var html_code = "<span>Hello</span> <span>World!</span>";

// 준비된 코드에서 문서 초기화
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
    // BODY의 첫 번째 자식(첫 번째 SPAN)에 대한 참조 가져오기
    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 문서 및 해당 요소 검사

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     
}

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
        }
    }
}

C#에서 XPath 쿼리를 사용한 웹 스크래핑

XPath는 HTML 문서에서 데이터를 추출하는 데 사용할 수 있습니다. 다음 코드 조각은 C#에서 웹 스크래핑에 XPath 쿼리를 사용하는 방법을 자세히 설명합니다.

// 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, "."))
{
    // 여기에서 'class' 속성이 'happy'와 동일한 요소에서 모든 하위 SPAN 요소를 선택하는 XPath 표현식을 평가합니다.
    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);
        // 출력: 안녕하세요
        // 출력: 세계!
    }
}

C#에서 CSS 선택기를 사용한 웹 스크래핑

CSS 선택기 구문을 기반으로 문서 트리의 요소와 일치하는 검색 패턴을 만들 수 있습니다. 아래 코드 스니펫은 C#에서 CSS 선택기를 사용하여 웹 스크래핑을 수행하는 방법을 설명합니다.

// 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, "."))
{
    // 여기에서 'class' 속성이 'happy'와 같은 모든 요소와 해당 하위 SPAN 요소를 추출하는 CSS 선택기를 만듭니다.
    var elements = document.QuerySelectorAll(".happy span");

    // 결과 요소 목록을 반복합니다.
    foreach (Aspose.Html.HTMLElement element in elements)
    {
        System.Console.WriteLine(element.InnerHTML);
        // 출력: 안녕하세요
        // 출력: 세계!
    }
}

무료 라이선스 받기

API를 전체 용량으로 평가하려면 무료 임시 라이선스를 요청할 수 있습니다.

결론

이 기사에서는 C#에서 웹 스크레이퍼를 만드는 여러 방법을 포함하는 C# 웹 스크래핑 라이브러리인 Aspose.HTML for .NET에 대해 배웠습니다. HTML 탐색, XPath 쿼리 및 요구 사항을 달성하기 위한 CSS 선택기 방법에 대해 설명합니다. 그러나 우려 사항이나 질문에 대해 논의해야 하는 경우 포럼에 편지를 보내주십시오.

또한보십시오