C#을 사용한 웹 스크래핑

웹 스크래핑은 웹사이트에서 데이터를 추출하는 데 사용되는 기술입니다. 웹 사이트 및 HTML 파일에서 데이터를 추출하는 프로세스를 자동화하는 데 도움이 됩니다. C# 개발자로서 우리는 웹 페이지에서 이미지, 비디오, 오디오 등과 같은 데이터를 쉽게 검사, 캡처 및 추출할 수 있습니다. 이 기사에서는 C#을 사용하여 HTML 파싱으로 웹 스크래핑을 수행하는 방법을 배웁니다.

이 기사에서는 다음 주제를 다룹니다.

C# 웹 스크래핑 API

HTML 파일 또는 URL에서 웹 스크래핑을 위해 Aspose.HTML for .NET API를 사용합니다. 외부 소프트웨어 없이 HTML 문서를 생성, 수정, 추출, 변환 및 렌더링할 수 있는 고급 HTML 처리 API입니다. API의 DLL을 다운로드하거나 NuGet을 사용하여 설치하십시오.

PM> Install-Package Aspose.Html

C#을 사용하여 HTML 읽기 및 추출

다음 단계에 따라 모든 HTML 문서에서 HTML을 읽고 추출할 수 있습니다.

  1. HTMLDocument 클래스를 사용하여 HTML 문서를 로드합니다.
  2. 파일의 내부 HTML을 콘솔에 표시합니다.

다음 코드 샘플은 C#을 사용하여 HTML 콘텐츠를 읽고 추출하는 방법을 보여줍니다.

// 이 코드 예제는 HTML 문서의 내용을 표시하는 방법을 보여줍니다
// HTML 문서 로드
var document = new HTMLDocument(@"D:\Files\html\input.html");

// 문서의 내부 HTML 표시
Console.WriteLine(document.Body.InnerHTML);
C#을 사용하여 HTML을 읽고 추출합니다.

C#을 사용하여 HTML을 읽고 추출합니다.

마찬가지로 아래와 같이 라이브 웹사이트에서 HTML을 읽고 추출할 수 있습니다.

// 이 코드 예제는 라이브 웹사이트 URL의 콘텐츠를 표시하는 방법을 보여줍니다.
// URL 초기화
Url url = new Url("https://en.wikipedia.org/wiki/HTML");

// Url 인스턴스를 사용하여 HTML 파일 로드
HTMLDocument document = new HTMLDocument(url);

// 콘솔에 파일의 내부 HTML 표시
Console.WriteLine(document.Body.InnerHTML);

C#을 사용하여 문서 요소 검사

다음 단계에 따라 문서와 해당 요소를 검사할 수 있습니다.

  1. HTMLDocument 클래스를 사용하여 HTML 문서를 로드합니다.
  2. 문서의 HTML 요소를 가져옵니다.
  3. HTML 요소의 첫 번째/마지막 요소를 가져옵니다.
  4. TagName, TextContent와 같은 요소 세부 정보를 표시합니다.

다음 코드 샘플은 C#을 사용하여 문서 요소를 검사하는 방법을 보여줍니다.

// 이 코드 예제는 HTML 요소를 검사하는 방법을 보여줍니다.
// 파일에서 문서 로드
string documentPath = @"D:\Files\html\input.html";
HTMLDocument document = new 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#에서 필터를 사용하여 특정 요소 찾기

사용자 정의 필터를 사용하여 모든 이미지, 링크 가져오기 등과 같은 특정 요소를 찾을 수 있습니다. 이를 위해 API는 TreeWalker 인터페이스를 제공합니다. WhatToShow 플래그 및 필터(있는 경우)로 정의된 문서 보기를 사용하여 문서 트리 또는 하위 트리를 탐색할 수 있습니다. 아래 단계에 따라 필터를 사용하여 특정 요소를 찾을 수 있습니다.

  1. NodeFilter 클래스를 사용하여 필터를 정의하고 AcceptNode() 메서드를 재정의합니다.
  2. HTMLDocument 클래스를 사용하여 HTML 문서를 로드합니다.
  3. CreateTreeWalker() 메서드를 호출합니다. 루트 노드, 표시할 항목 및 NodeFilter를 인수로 사용합니다.

다음 코드 샘플은 C#을 사용하여 특정 요소를 찾는 방법을 보여줍니다.

// 이 코드 예제는 필터를 사용하여 데이터를 쿼리하는 방법을 보여줍니다.
// HTML 문서 로드
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");

// HTML 탐색을 시작하려면 TreeWalker의 인스턴스를 만들어야 합니다.
// 지정된 매개변수는 문서의 루트에서 걷기 시작한다는 것을 의미합니다.
// 모든 노드를 반복하고 필터의 사용자 정의 구현을 사용합니다.
using (var iterator = document.CreateTreeWalker(document, Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
{
    while (iterator.NextNode() != null)
    {
        // 자체 필터를 사용하고 있으므로 현재 노드는 항상 HTMLImageElement의 인스턴스가 됩니다.
        // 따라서 여기에 추가 유효성 검사가 필요하지 않습니다.
        var image = (HTMLImageElement)iterator.CurrentNode;

        System.Console.WriteLine(image.Src);
        // 출력: image1.png
        // 출력: image2.png
    }
}
// 이 코드 예제는 노드 필터를 정의하는 방법을 보여줍니다.
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;
    }
}

C#을 사용하여 HTML에서 데이터 쿼리

XPath 쿼리를 사용하여 아래 단계에 따라 HTML 문서에서 데이터를 쿼리할 수도 있습니다.

  1. HTMLDocument 클래스를 사용하여 HTML 문서를 로드합니다.
  2. Evaluate() 메서드를 호출합니다. XPath 표현식 문자열, 문서 및 유형을 인수로 사용합니다.
  3. 마지막으로 결과 노드를 반복하고 텍스트를 표시합니다.

다음 코드 샘플은 C#을 사용하여 XPath 쿼리로 데이터를 쿼리하는 방법을 보여줍니다.

// 이 코드 예제는 XPath 쿼리를 사용하여 데이터를 쿼리하는 방법을 보여줍니다.
// HTML 코드 준비
var code = @"
    <div class='happy'>
        <div>
            <span>Hello!</span>
        </div>
    </div>
    <p class='happy'>
        <span>World</span>
    </p>
";

// 준비된 코드를 기반으로 문서 초기화
HTMLDocument document = new HTMLDocument(code, ".");

// 여기에서 모든 하위 SPAN 요소를 선택하는 XPath 표현식을 평가합니다. 
// '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);
    // 출력: 안녕하세요
    // 출력: 세계!
}

C#에서 CSS 선택기를 사용하여 추출

CSS 선택기를 사용하여 HTML 콘텐츠를 추출할 수도 있습니다. 이를 위해 API는 HTML 문서를 탐색하고 필요한 요소를 검색할 수 있는 QuerySelectorAll() 메서드를 제공합니다. 쿼리 선택기를 매개 변수로 사용하고 모든 요소의 일치하는 NodeList를 반환합니다. 다음 단계에 따라 CSS 선택기를 사용하여 쿼리할 수 있습니다.

  1. HTMLDocument 클래스를 사용하여 HTML 문서를 로드합니다.
  2. QuerySelectorAll() 메서드를 호출합니다. 쿼리 선택기를 인수로 사용합니다.
  3. 마지막으로 결과 요소 목록을 반복합니다.

다음 코드 샘플은 C#에서 CSS 선택기를 사용하여 HTML 콘텐츠를 추출하는 방법을 보여줍니다.

// 준비된 코드를 기반으로 문서 초기화
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");

// 여기에서 모든 div 요소를 추출하는 CSS 선택기를 만듭니다.
var elements = document.QuerySelectorAll("div");

// 결과 요소 목록을 반복합니다.
foreach (Aspose.Html.HTMLElement element in elements)
{
    System.Console.WriteLine(element.InnerHTML);
}

무료 라이선스 받기

임시 무료 라이선스를 신청하여 평가 제한 없이 API를 사용해 보세요.

결론

이 문서에서는 다음 방법을 배웠습니다.

  • C#을 사용하여 HTML 문서의 내용을 읽고 추출합니다.
  • 문서 요소를 검사하고 HTML에서 특정 요소를 찾습니다.
  • CSS Selector를 사용하여 특정 데이터를 쿼리하고 데이터를 추출합니다.

또한 문서를 사용하여 .NET API용 Aspose.HTML에 대해 자세히 알아볼 수 있습니다. 모호한 부분이 있는 경우 포럼을 통해 언제든지 문의해 주십시오.

또한보십시오