1. 환경 준비
1. 참조 방식
주로 사용하는 방식은 두 가지입니다:
- 구 방식:
HtmlAgilityPack.dll수동 참조 추가 - 권장 방식: NuGet 패키지 설치
Install-Package HtmlAgilityPack
2. 자주 쓰이는 핵심 클래스
| 클래스 이름 | 설명 |
|---|---|
HtmlDocument | HTML 문서 객체, HTML 소스 로딩 처리 |
HtmlWeb | 네트워크 요청 클래스, URL에서 웹페이지 HTML 직접 가져오기 |
HtmlNode | 개별 HTML DOM 노드 (div/a/p 등 태그) |
HtmlNodeCollection | HtmlNode 컬렉션, 여러 개의 조회 결과 보관 |
2. HTML 불러오는 두 가지 방법
두 방식 모두 최종적으로 HtmlDocument 객체를 얻게 됩니다
1: 로컬 파일 / HTML 문자열 불러오기
- 로컬 HTML 파일 불러오기
using HtmlAgilityPack;
using System.Text;
HtmlDocument document = new HtmlDocument();
// 인코딩 지정 후 로컬 파일 로드
document.Load("news.htm", Encoding.UTF8);Code language: JavaScript (javascript)
- 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"):조건에 맞는첫 번째노드를 반환, 리턴 타입HtmlNodeSelectNodes("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:현재 태그 자체와 내부 전체 HTMLGetAttributeValue("속성이름","기본값"):안전하게 태그 속성 읽기
활용 예시
Previous: XPath
Next: 문서 콘텐츠 가져오기