C#:
HTML 파싱

어떻게 사용하는가:

.NET은 웹 페이지를 가져오는 HttpClient와 같은 HTML 작업을 위한 기본 지원을 제공하지만, 통합된 포괄적인 HTML 파서는 제공하지 않습니다. 따라서 대부분의 C# 개발자들은 HtmlAgilityPack이나 AngleSharp과 같은 인기 있는 제3자 라이브러리로 전환하여 견고한 HTML 파싱 기능을 활용합니다. 두 라이브러리 모두 HTML DOM의 쉬운 쿼리, 조작 및 순회를 가능하게 합니다.

HtmlAgilityPack 사용하기

  1. HtmlAgilityPack 설치하기: 먼저, NuGet을 통해 프로젝트에 HtmlAgilityPack 패키지를 추가합니다.

    Install-Package HtmlAgilityPack
  2. 예제 코드: HTML 문자열을 파싱하고 모든 <h1> 요소의 제목을 추출합니다.

    using HtmlAgilityPack;
    using System;
    using System.Linq;
    
    class Program
    {
        static void Main(string[] args)
        {
            var html = @"<html>
                          <body>
                              <h1>Title 1</h1>
                              <h1>Title 2</h1>
                          </body>
                         </html>";
            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(html);
    
            var h1Tags = htmlDoc.DocumentNode.SelectNodes("//h1").Select(node => node.InnerText);
            foreach (var title in h1Tags)
            {
                Console.WriteLine(title);
            }
        }
    }

    출력 예시:

    Title 1
    Title 2

AngleSharp 사용하기

  1. AngleSharp 설치하기: NuGet을 통해 프로젝트에 AngleSharp 라이브러리를 추가합니다.

    Install-Package AngleSharp
  2. 예제 코드: HTML 문서를 로드하고 특정 클래스를 가진 div 요소를 쿼리합니다.

    using AngleSharp;
    using AngleSharp.Dom;
    using System;
    using System.Linq;
    using System.Threading.Tasks;
    
    class Program
    {
        static async Task Main(string[] args)
        {
            var context = BrowsingContext.New(Configuration.Default);
            var document = await context.OpenAsync(req => req.Content("<div class='item'>Item 1</div><div class='item'>Item 2</div>"));
    
            var items = document.QuerySelectorAll(".item").Select(element => element.TextContent);
            foreach (var item in items)
            {
                Console.WriteLine(item);
            }
        }
    }

    출력 예시:

    Item 1
    Item 2

HtmlAgilityPack과 AngleSharp 모두 HTML 파싱을 위한 강력한 도구이지만, 이들 중 어느 것을 선택할지는 특정 프로젝트 요구 사항, 성능 고려 사항 또는 API 디자인에 대한 개인적인 선호도에 따라 달라질 수 있습니다.