티스토리 뷰
반응형
✅ 1. DOMDocument 클래스 (내장 라이브러리)
PHP에 기본 내장된 클래스로, HTML을 로드하고 요소를 탐색할 수 있습니다.
예시:
<?php
$html = <<<HTML
<html>
<body>
<div class="item">Item 1</div>
<div class="item">Item 2</div>
</body>
</html>
HTML;
$doc = new DOMDocument();
libxml_use_internal_errors(true); // HTML 파싱 중 경고 무시
$doc->loadHTML($html);
libxml_clear_errors();
$xpath = new DOMXPath($doc);
$items = $xpath->query('//div[@class="item"]');
foreach ($items as $item) {
echo $item->nodeValue . "\n";
}
?>
출력:
Item 1
Item 2
✅ 2. Simple HTML DOM Parser (외부 라이브러리)
더 직관적인 문법을 제공하며, HTML을 CSS 선택자처럼 쉽게 다룰 수 있습니다.
설치 (composer 사용):
composer require simplehtmldom/simplehtmldom
사용 예시:
<?php
require 'vendor/autoload.php';
use Sunra\PhpSimple\HtmlDomParser;
$html = <<<HTML
<html><body><div class="item">Item 1</div><div class="item">Item 2</div></body></html>
HTML;
$dom = HtmlDomParser::str_get_html($html);
foreach ($dom->find('.item') as $element) {
echo $element->plaintext . "\n";
}
?>
✅ 3. Symfony DomCrawler
조금 더 무겁지만 테스트와 크롤링에 강력한 기능을 제공하는 컴포넌트입니다.
설치:
composer require symfony/dom-crawler
composer require symfony/css-selector
사용 예시:
<?php
require 'vendor/autoload.php';
use Symfony\Component\DomCrawler\Crawler;
$html = '<html><body><div class="item">Item 1</div><div class="item">Item 2</div></body></html>';
$crawler = new Crawler($html);
$crawler->filter('.item')->each(function (Crawler $node) {
echo $node->text() . "\n";
});
?>
🔍 언제 어떤 걸 써야 할까?
상황 | 추천 |
기본 기능으로 충분할 때 | DOMDocument |
빠르게 개발하고 싶을 때 | Simple HTML DOM Parser |
크롤링이나 테스트 자동화 시 | Symfony DomCrawler |
반응형
'배움 > PHP' 카테고리의 다른 글
PHP collect 함수와 예제들 (0) | 2025.04.28 |
---|---|
Laravel 11 Eloquent: Relationships 연관관계 (0) | 2025.04.25 |
Laravel 11 라라벨 스케줄링(Scheduling) (0) | 2025.04.16 |
Lavavel Console Command Argument 옵션 (0) | 2025.04.15 |
Laravel 의 Concurrency 기능 (0) | 2025.04.14 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- laravel 테스트
- ob_get_contents
- createfromformat
- WSL2
- uniqid
- 비동기
- Laravel
- laravel 11
- array_combine
- eloquent
- #collect
- laravel 12
- wsl
- privatechannel
- facades
- flask
- mysql
- PYTHON
- jp:a
- 명령어
- curl_multi_init
- swagger
- 설치
- reflectionclass
- ubuntu
- researcher
- call_user_func
- php
- 설정
- strict_types
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
글 보관함