PHP Simple HTML Dom을 사용한 웹 크롤링

웹 크롤링이 불법인가? 합법인가? 에 대한 여론은 항상 있었다. 정확히 말하면 웹 크롤링 자체는 불법이 아니며 수집한 데이터를 상업적으로 이용하는 경우, 데이터를 수집하는 과정에서 상대 서버에 문제를 일으킨 경우는 불법으로 간주할 수도 있으니 이를 잘 숙지하고 문제 되지 않게 이용하면 된다.

Simple HTML Dom을 사용한 간단한 웹 크롤링 방법에 대하여 설명하겠다.


1. Simple HTML Dom 다운로드

여기에서 Simple HTML Dom 압축 파일을 다운로드 받고 서버에 simple_html_dom.php 파일을 업로드한다.

2. Simple HTML Dom 로드

파일 최상단 또는 Head 파일에 다음과 같이 작성하여 Simple HTML Dom을 사용하기 위해 추가한다.

<?php
    require_once "simple_html_dom.php";
?>

3. cURL 통신 함수 작성

크롤링하려는 웹 사이트와 통신하기 위한 cURL 함수를 작성한다.

<?php
    function file_get_contents_curl($url){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 웹 사이트가 https일 때 필요
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }
?>

Call to undefined function curl_init() 에러가 발생한다면 cURL이 웹 서버에 설치되지 않은 상태이므로 웹 서버에 접속하여 다음과 같이 작성해서 cURL을 설치한다. 프롬프트가 나타나면 y를 입력해서 설치를 계속한다.

sudo dnf install curl -y

4. Simple HTML Dom을 사용한 웹 크롤링

다음과 같이 작성하여 웹 사이트와 통신해서 크롤링한 데이터를 출력할 수 있다.

기본적인 HTML 요소 – a, p, div
속성을 가진 요소 – div[id], div[id=foo]
아이디 또는 클래스 요소 – #foo, .foo
요소의 자식 요소 – ul > li, table.foo > td
텍스트 요소 – text
주석 요소 – <!– … –>

(자세한 문서는 여기)

<?php
    $url = "웹 사이트 주소";
    $str = file_get_contents_curl($url);
    $html = new simple_html_dom();
    $html->load($str);
    foreach($html->find("웹 사이트의 HTML 요소") as $data){
            echo $data;
    }
?>

Simple HTML Dom을 사용한 크롤링을 잘 활용한다면 이렇게 검색 폼에서 검색했을 때 원하는 데이터들을 가져와 출력할 수 있다.

크롤링한 웹 사이트 출처 – 다나와


위로 스크롤