본문 바로가기

카테고리 없음

[PHP] html 파싱 라이브러리, Simple HTML DOM Parser

html을 효과적으로 파싱하기 위해서는 라이브러리의 도움이 필요하다.


PHP에는 이를 지원하는 아주 완벽한 라이브러리가 존재하는데, JQuery 문법을 차용하여 특히나 우리나라에서 요긴하게 쓰였던 이력이 있다. 마침 이 라이브러리를 활용할 때가 생겨 글을 써본다.




1. 다운로드


이 링크 (source forge) 를 따라 들어가면 다운로드 링크를 얻을 수 있다. 나는 1.7버전을 다운받음.



그리고 simple_html_dom.php 파일을 제외하고 전부 삭제한다.




2. 과정


<?php
include './plugins/simple-html-dom/simple-html-dom.php';


적절한 곳에 simple html dom 파일을 놓고 include한다.

<?php
include './plugins/simple-html-dom/simple-html-dom.php';

$url = 'https://bino.blog/';
$html = file_get_contents($url);

file_get_contents 함수를 이용하여 해당 주소의 모든 html 코드를 파싱한다.



그 다음에는 이유는 모르겠지만 str_get_html 함수로 file_get_contents 함수를 한번 더 불러와야 한다.

아마 내부 함수를 사용하기 위해 변수가 클래스로 변화하는 과정인가보다.


<?php
include './plugins/simple-html-dom/simple-html-dom.php';

$url = 'https://bino.blog/';
$html = file_get_contents($url);
if ($html !== false) {
$html = str_get_html($html);
}



이제 if문 안의 $html 변수는 하나의 body 엘리먼트가 된다. 이게 무슨 말이냐면

foreach($html->find('a') as $element)
echo $element . '<br>';

$html 변수에 find 내부 함수를 적용시킨다.

find('a')의 뜻은 모든 a태그를 불러온다는 뜻이다.


a 태그의 프로퍼티를 가져오고 싶다면


foreach($html->find('a') as $element)
echo $element->href . '<br>';


의외로 매우 간단하게 해당 프로퍼티의 이름을 함수로 불러오면 된다.





$element->outertext


자바스크립트에서의 outerHTML 처럼 태그 전체를 가져온다.


$element->innertext


자바스크립트에서의 innerHTML 처럼 태그의 내용을 가져온다.