DOM이 뭐지? PHP에서 HTML/XML 데이터 뽑아내는 DOM 사용법
웹 페이지에서 특정 정보를 추출하거나, HTML 문서를 동적으로 조작해야 할 때가 있습니다. 예를 들어, 블로그 게시물의 모든 제목을 가져오거나, 특정 데이터를 기반으로 표를 자동으로 생성해야 할 수도 있죠. 이럴 때 바로 DOM(Document Object Model)을 활용하면 아주 유용합니다. PHP에서 DOM을 어떻게 사용하는지, 그리고 DOM이 정확히 무엇인지 저와 함께 자세히 알아보겠습니다.
목차
1. DOM(Document Object Model)이란 무엇인가요?
2. PHP에서 DOM을 사용하는 이유
3. PHP DOM 사용법: DOMDocument와 DOMXPath
4. 실제 시나리오에서 DOM 활용하기
5. 자주 묻는 질문
DOM(Document Object Model)이란 무엇인가요?

DOM은 웹 페이지의 HTML 또는 XML 문서를 프로그래밍적으로 접근하고 조작할 수 있도록 해주는 API(Application Programming Interface)입니다. 웹 브라우저는 HTML 문서를 읽어들여 DOM 객체 모델로 변환한 후 화면에 렌더링합니다.
쉽게 말해, HTML 문서를 트리(Tree) 구조의 객체들로 표현한 것이라고 생각하시면 됩니다. 각 HTML 태그(예: <div>, <p>, <h2>)는 이 트리의 노드(Node)가 되고, 이 노드들을 통해 문서의 내용을 탐색하고 수정할 수 있습니다.
DOM은 단순히 HTML 텍스트를 파싱하는 것을 넘어, 문서의 구조와 각 요소의 관계를 이해하고 조작할 수 있게 해준다는 점에서 일반적인 문자열 처리와 큰 차이가 있습니다.
PHP에서 DOM을 사용하는 이유

PHP에서 DOM을 사용하면 다음과 같은 장점들이 있습니다.
- 강력한 파싱 능력: 복잡하거나 잘 구성되지 않은 HTML 문서도 안정적으로 파싱할 수 있습니다.
- 구조적 접근: 태그 이름, ID, 클래스, 속성 등을 기반으로 원하는 요소를 정확하게 찾아낼 수 있습니다.
- 쉬운 조작: 요소의 내용을 변경하거나, 새로운 요소를 추가하거나, 기존 요소를 삭제하는 등의 작업이 용이합니다.
- 유지보수 용이성: 정규표현식 기반의 파싱보다 코드의 가독성이 좋고 유지보수가 쉽습니다.
예를 들어, 웹 스크래핑을 통해 특정 웹사이트에서 뉴스 기사의 제목과 본문을 가져와야 할 때 DOM을 사용하면 효율적으로 작업할 수 있습니다.
PHP DOM 사용법: DOMDocument와 DOMXPath

PHP에서 DOM을 사용하기 위한 핵심 클래스는 DOMDocument와 DOMXPath입니다.
1. DOMDocument 클래스
DOMDocument는 HTML 또는 XML 문서를 로드하고 DOM 트리로 변환하는 역할을 합니다. 이 클래스를 통해 문서의 전체 구조에 접근할 수 있습니다.
DOMDocument 기본 사용 예시
다음은 HTML 문자열을 DOMDocument 객체로 로드하는 간단한 예시입니다.
<?php
$html = '<!DOCTYPE html><html><body><h1>안녕하세요</h1><p>이것은 테스트입니다.</p></body></html>';
$dom = new DOMDocument();
// HTML을 로드할 때 발생하는 경고를 억제합니다.
@$dom->loadHTML($html);
// 문서의 루트 요소 ()에 접근
$root = $dom->documentElement;
echo $root->nodeName; // 출력: html
// 첫 번째 h1 태그의 텍스트 콘텐츠 가져오기
$h1 = $dom->getElementsByTagName('h1')->item(0);
if ($h1) {
echo $h1->textContent; // 출력: 안녕하세요
}
?>
loadHTML() 함수는 HTML이 잘 구성되지 않았을 때 경고를 발생시킬 수 있습니다. 예시 코드처럼 @ 연산자를 사용하여 경고를 억제할 수 있지만, 실제 프로덕션 환경에서는 libxml_use_internal_errors(true)와 libxml_clear_errors()를 함께 사용하여 더 체계적으로 오류를 처리하는 것이 좋습니다.
2. DOMXPath 클래스
DOMXPath는 XML 경로 언어인 XPath를 사용하여 DOM 문서 내의 노드를 쿼리하는 데 사용됩니다. 특정 조건을 만족하는 노드를 찾을 때 매우 강력한 도구입니다.
DOMXPath 기본 사용 예시
글의 서두에 제시된 PHP 코드 스니펫은 DOMXPath를 활용하여 모든 <h2> 태그의 내용을 추출하는 좋은 예시입니다. 이를 다시 살펴보며 어떻게 작동하는지 분석해봅시다.
<?php
public function getH2Content(string $html) {
// 1. DOMDocument 객체 생성
$dom = new DOMDocument();
// 2. HTML 로드 (UTF-8 인코딩 명시)
// @는 loadHTML에서 발생할 수 있는 경고를 억제합니다.
@$dom->loadHTML("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">" . $html);
// 3. DOMXPath 객체 생성 (DOMDocument를 기반으로)
$xpath = new DOMXPath($dom);
// 4. XPath 쿼리를 사용하여 모든 <h2> 태그 선택
$h2Nodes = $xpath->query('//h2'); // '//h2'는 문서의 모든 h2 태그를 의미합니다.
$h2Contents = [];
// 5. 선택된 각 <h2> 노드를 반복하며 텍스트 추출
foreach ($h2Nodes as $h2) {
$h2Contents[] = trim($h2->textContent); // textContent로 내부 텍스트 추출 후 공백 제거
}
return $h2Contents;
}
// 함수 사용 예시
$sampleHtml = '<div><h2><strong>첫 번째 제목</strong></h2><p>내용 1</p><h3>하위 제목</h3><h2>두 번째 제목</h2></div>';
$h2Titles = getH2Content($sampleHtml);
print_r($h2Titles);
/* 출력:
Array
(
[0] => 첫 번째 제목
[1] => 두 번째 제목
)
*/
?>
위 코드에서 주목할 부분은 $xpath->query('//h2')입니다. 여기서 //h2는 XPath 표현식으로, 문서 내의 모든 <h2> 태그를 찾아 반환하라는 의미입니다.
| XPath 표현식 예시 | 설명 |
|---|---|
//tagname |
문서 내의 모든 'tagname' 요소 선택 |
/html/body/div/p |
<html> 아래 <body> 아래 <div> 아래 <p> 요소 선택 |
//div[@id="myId"] |
id 속성값이 "myId"인 모든 <div> 요소 선택 |
//a[contains(@href, "example.com")] |
href 속성값에 "example.com"이 포함된 모든 <a> 요소 선택 |
실제 시나리오에서 DOM 활용하기
PHP DOM은 단순한 제목 추출 외에도 다양한 시나리오에서 활용될 수 있습니다.
- 웹 스크래핑: 특정 웹사이트에서 상품 정보, 뉴스 기사, 게시글 내용 등을 추출할 때 사용합니다.
- 콘텐츠 변환: HTML 문서를 다른 형식(예: 마크다운, 플레인 텍스트)으로 변환하거나, 특정 태그를 제거하는 등의 작업을 수행할 수 있습니다.
- SEO 최적화: 웹 페이지의 메타 데이터나 이미지
alt태그 등을 분석하여 SEO 개선점을 찾을 수 있습니다. - 데이터 유효성 검사: 특정 HTML 구조나 내용이 필수적으로 포함되어 있는지 검사하는 데 사용될 수 있습니다.
PHP DOM 핵심 요약
DOMDocument (문서 로드), DOMXPath (XPath 쿼리)자주 묻는 질문
DOMDocument의 loadXML() 메서드를 사용하면 됩니다.file_get_contents()와 DOM 파싱의 차이점은 무엇인가요?file_get_contents()는 단순히 웹 페이지의 HTML 소스 코드를 문자열로 가져오는 역할을 합니다. 반면 DOM 파싱은 이 문자열을 분석하여 트리 구조의 객체 모델로 만들고, 이를 통해 HTML 요소에 구조적으로 접근하고 조작할 수 있게 해줍니다. 문자열에서 특정 패턴을 찾는 정규표현식보다 훨씬 강력하고 안정적입니다.이제 PHP DOM의 개념과 기본적인 사용법에 대해 이해하셨기를 바랍니다. 웹 개발이나 데이터 처리 작업을 하실 때 이 지식이 분명 도움이 될 것입니다.
관련글
태그: PHP DOM, DOMDocument, DOMXPath, PHP 웹 스크래핑, HTML 파싱, 웹 데이터 추출, PHP DOM 사용법, PHP XPath, PHP




