웹스쿨

CURL 웹 크롤링 데이터 수집 - 1단계(스누피 사용) 본문

개인 프로젝트/Auto 크롤링

CURL 웹 크롤링 데이터 수집 - 1단계(스누피 사용)

마스터욱 2023. 3. 29. 00:45
반응형

php 크롤링 라이브러리중에 스누피(snoopy) 라는 녀석이 있습니다.

이 스누피 안에 기본적으로 CURL 이 탑재되어 있습니다.

이 스누피를 이용하면 크롤링에 대한 세부옵션을 설정하여 데이터를 긁어올 수 있습니다.

아래 소스를 보시면 별의별 삽질을 한 흔적이 다 있습니다.

 

- 로그인 처리후 긁어오기

- IP가 막힌경우 프록시 서버를 거쳐서 긁어오기

- 쿠키나 세션이 필요한 경우 데이터를 굽고 들어가기

 

클라우드페어(CloudFlare) 서버를 제외하곤 왠만한 사이트는 다 긁어와졌습니다.

아래함수는 일단 게시판의 리스트/상세를 긁어올 목적으로 제작한 함수입니다.

 

function getSiteString_snoopy($url)
{
include_once "../plugin/snoopy/Snoopy.class.php";
$snoopy = new Snoopy();
/*
// 스누피 로그인 처리후 긁어오기
$__s=new snoopy;
$url=긁어올url;
$s[‘account_id’]=“내 아이디”;
$s[‘password’]=“내 비밀번호”;
$__s->submit($url,$s);
$__s->setcookies();
$__s->fetch(“http://www.linkprice.com/AC/index.htm”);
*/
/*
# 로그인 후 긁어오기


# 스누피 이미지 저장하는 샘플
$snoopy->fetch('http://www.8725.com/product/admin/8725_files/');
$f = fopen("./images/a.jpg",'w');
fwrite ($f,$snoopy->results);
fclose ($f);
*/
//$snoopy->proxy_host = "175.118.112.51";
//$snoopy->proxy_port = "80";
//홍콩 202.77.57.124 3128 -0.00s
//홍콩 218.213.166.218 81 0.79s
//홍콩 124.244.77.129 80 1.03s
//홍콩 113.255.49.49 80 1.08s
//홍콩 223.19.212.30 80 1.30s
/*
$snoopy->agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
$snoopy->referer = "http://www.jonasjohn.de/";
*/
/*
$snoopy->referer = $url;
$snoopy->cookies["PHPSESSID"] = "umnl57bifigsukev73epoklr86";
$snoopy->cookies["2a0d2363701f23f8a75028924a3af643"] = "MTQxLjEwMS44NC4xMjg";
$snoopy->cookies["__cfduid"] = "d64593d742958b3e1e4babbb13aabceea1456209886";
$snoopy->cookies["_ga"] = "GA1.2.234414765.1456209892";
$snoopy->cookies["_gat"] = "1";
$snoopy->submit($url);
*/
/*
fetch($URI) : 입력받은 주소의 html소스를 텍스트 형식으로 $results에 저장합니다.
fetchlinks($URI) : fetch와 비슷하지만 링크만을 배열의 형태로 $results에 저장합니다. 링크를 타고가야할 필요가 있는 작업에 유용하겠죠?
fetchtext($URI) : fetch와 비슷하지만 스크립트를 제외한 텍스트만 $results에 저장합니다.
fetchform($URI) : fetch와 비슷하지만 폼 부분을 html형식으로 $results에 저장합니다.
submit($URI, $formvars="", $formfiles="") : 폼에 여러 변수를 붙여서 전송 할 수 있습니다. 보통 많은 로그인이 폼으로 이루어지므로 유용하게 사용됩니다.
setcookies() : 종종 쿠키정보를 유지해야하는 경우가 있는데 그럴때 사용합니다.
*/
$parse_url = parse_url($url);
$protocol = $parse_url['scheme']; // http , https
$host = $parse_url['host']; // naver.com
$path = $parse_url['path']; // /data/file/test.jpg
if ( $parse_url['query'] != "" ) {
$path .= "?" . $parse_url['query'];
}
$refer = $protocol . "://" . $host;
//echo "refer = {$refer}";exit;
$snoopy->referer = $refer;
//$snoopy->agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
$snoopy->agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)";
$snoopy->submit($url);
$snoopy->setcookies();
$snoopy->fetch($url);
$result = $snoopy->results;
//$headers = $snoopy->headers;
//print_r($headers);exit;
if ( $result == "" || strpos($result, "CloudFlare") !== false ) {
$result = getSiteString_curl($url);
}
return $result;
}

이 게시글은
https://webschool.kr/?v=board_view&board_key=47&idx=763
에서 작성한 글입니다. 소스코드의 경우 해당 블로그에서 이뿌게 노출이 되지 않을 수 있사오니, 위 링크로 들어오셔서 보시길 바랍니다.

반응형