웹 크롤링이 불법인가? 합법인가? 에 대한 여론은 항상 있었다. 정확히 말하면 웹 크롤링 자체는 불법이 아니며 수집한 데이터를 상업적으로 이용하는 경우, 데이터를 수집하는 과정에서 상대 서버에 문제를 일으킨 경우는 불법으로 간주할 수도 있으니 이를 잘 숙지하고 문제 되지 않게 이용하면 된다.
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을 사용한 크롤링을 잘 활용한다면 이렇게 검색 폼에서 검색했을 때 원하는 데이터들을 가져와 출력할 수 있다.
크롤링한 웹 사이트 출처 – 다나와