활용 예시

1. 환경 준비

1. 참조 방식

주로 사용하는 방식은 두 가지입니다:

  1. 구 방식: HtmlAgilityPack.dll 수동 참조 추가
  2. 권장 방식: NuGet 패키지 설치
Install-Package HtmlAgilityPack
2. 자주 쓰이는 핵심 클래스
클래스 이름설명
HtmlDocumentHTML 문서 객체, HTML 소스 로딩 처리
HtmlWeb네트워크 요청 클래스, URL에서 웹페이지 HTML 직접 가져오기
HtmlNode개별 HTML DOM 노드 (div/a/p 등 태그)
HtmlNodeCollectionHtmlNode 컬렉션, 여러 개의 조회 결과 보관

2. HTML 불러오는 두 가지 방법

두 방식 모두 최종적으로 HtmlDocument 객체를 얻게 됩니다

1: 로컬 파일 / HTML 문자열 불러오기
  1. 로컬 HTML 파일 불러오기
using HtmlAgilityPack;
using System.Text;

HtmlDocument document = new HtmlDocument();
// 인코딩 지정 후 로컬 파일 로드
document.Load("news.htm", Encoding.UTF8);Code language: JavaScript (javascript)
  1. HTML 텍스트 문자열 불러오기
string htmlStr = "<html>...</html>";
document.LoadHtml(htmlStr);Code language: HTML, XML (xml)
2: 온라인 웹페이지 불러오기
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("https://example.com");Code language: JavaScript (javascript)

3. 노드 조회

// 1. 문서 객체 생성
HtmlDocument document = new HtmlDocument();
// 2. 로컬 html 파일 읽기
document.Load("news.htm", Encoding.UTF8);
// 3. 문서 루트 노드 획득
HtmlNode rootNode = document.DocumentNode;
// 4. XPath로 다중 노드 조회, 노드 컬렉션 반환
HtmlNodeCollection newsList = rootNode.SelectNodes(
    @"//html/body/div[@class='content']/div/div[@class='left']/div[1]/div[@class='blk12']/div[@class='blk122']/a"
);Code language: JavaScript (javascript)

주요 메서드 안내

  • SelectSingleNode("XPath"):조건에 맞는첫 번째노드를 반환, 리턴 타입 HtmlNode
  • SelectNodes("XPath"):조건에 맞는모든노드를 반환, 리턴 타입 HtmlNodeCollection
  • 교육 자료는 완전한 절대 경로를 사용하지만 실제 프로젝트에서는전역 상대 검색으로 XPath를 간소화하는 게 권장됩니다. 페이지 변경으로 XPath가 깨지는 위험을 낮춥니다:
//div[@class='blk122']/aCode language: JSON / JSON with Comments (json)

4. 순회하며 콘텐츠 가져오기 예시

if(newsList != null)
{
    foreach(HtmlNode aNode in newsList)
    {
        string title = aNode.InnerText;          // 태그 내부 텍스트 가져오기
        string link  = aNode.GetAttributeValue("href",""); // href 속성 읽기
    }
}Code language: PHP (php)

5. 자주 쓰이는 속성 빠른 참조

  • .InnerText:태그 안 순수 텍스트
  • .InnerHtml:자식 태그를 포함한 내부 HTML 소스
  • .OuterHtml:현재 태그 자체와 내부 전체 HTML
  • GetAttributeValue("속성이름","기본값"):안전하게 태그 속성 읽기

활용 예시

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다