웹솔루션개발 22년 노하우! 해피CGI의 모든것

[해피CGI][cgimall] Snoopy 를 이용한 크롤러 본문

웹프로그램밍 자료실/PHP 자료

[해피CGI][cgimall] Snoopy 를 이용한 크롤러

해피CGI윤실장 2018. 8. 21. 08:58

안녕하세요 이번에 소개해 드릴 자료는 Snoopy 를 이용한 사이트 크롤링 입니다.

첨부된 압축파일을 해제하시면 Snoopy 폴더와 index.php 파일이 있습니다.



Snoopy 사용방법에 대해서 먼저 설명합니다.

자 그럼 Snoopy 를 include 합니다.
include ('/설치경로/Snoopy/Snoopy.class.php'); 
(설치경로는 사용자 마다 다르기 때문에 알아서 수정하시기 바랍니다.)

이번엔 클래스를 생성 합니다.
$snoopy = new Snoopy;

그리고 사이트를 호출하여 정보를 출력해 볼께요.
$snoopy->fetch('http://www.naver.com');

결과물을 이미지로 한번 보죠.


제 PC에 설치된 Ubuntu 서버를 이용하여 로컬 환경을 구축했습니다.
PC 에 Ubuntu 설치하는 방법이 궁금하시면 아래의 링크를 클릭하세요.
[ windows 10에 Ubuntu 설치하자 ]


크롤링을 하려면 먼저 반복된 패턴이 필요 합니다.
예를 들면 html 태그 중 반복된 class 명이 있다거나 id 값이 있다거나 할 경우를 찾으시면 됩니다.

제가 좋아하는 낚시에 대해서 크롤링 예를 들어 보겠습니다.
지마켓의 특정 낚시 카테고리를 페이지를 예로 들겠습니다.
http://category.gmarket.co.kr/listview/List.aspx?gdmc_cd=200002448&ecp_gdlc=&ecp_gdmc=

html 소스를 보면 아래와 같은 규칙을 가지고 있습니다. 


다른 리스트들과 중복되지 않는 값을 찾아야 하는데요.
<ul class="item_list type_list" id="searchListItems">
searchListItems 가 중복되지 않는 키 포인트가 되겠네요.

아이템을 가져오고 싶다면 ...
$snoopy->fetch('http://category.gmarket.co.kr/listview/List.aspx?gdmc_cd=200002448&ecp_gdlc=&ecp_gdmc=');
preg_match('/<ul class=\"item_list type_list\" id=\"searchListItems\">(.*?)<\/ul>/is', iconv("euc-kr","utf-8",$snoopy->results), $product_list);
print_r($product_list);
    //결과물 출력

위의 코드처럼 searchListItems을 이용하여 preg_match 하시면 원하시는 결과물을 가져올 수 있습니다.


첨부해 드린 코드보다 사용하기 좋거나 편한 것들도 많습니다.
그러나 한번쯤은 이런식으로 만들어서 사용해 보는것도 괜찮을듯 하여 ... 파일을 첨부하니 참고 해 주시구요.
여기서 부터는 응용하시면 점점 발전하는 크롤러를 만드실 수 있습니다. ^^*




홈페이지바로가기 소스다운로드


Comments