1311월/19

php 로그인, 크롤링 by Snoopy

간혹 업체의 report api가 구비되지 않아서 크롤링을 한다거나, 주기적인 업데이트를 위해 크롤링이 필요한 경우가 있다. 그와중에 로그인 후 크롤링을 할 경우까지 종종 등장한다. 이때 오래되었으나 snoopy 라이브러리를 이용하면 좋다. Snoopy download https://sourceforge.net/projects/snoopy/ 바로 import하여 사용한다. <?php require_once(‘lib/Snoopy.class.php’); $snoopy = new Snoopy; $snoopy->agent = “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)”; //login $loginUri = ‘http://www.bluebee.co.kr/loginTest.php’; $snoopy->httpmethod = “POST”; $auth[‘id’] = ‘bluebee’; $auth[‘password’] = ‘1234’; $snoopy->submit($loginUri, $auth); $snoopy->setcookies(); //로그인에 쿠키를 사용하는 경우가 있으니 쿠키정보를 저장 $loginResult = json_decode($snoopy->results); $report_data = array(); if($loginResult->{‘ret’} != “ok”) { echo ‘Login 실패!’; exit; } else { //리포트 데이터 크롤링 $reportUri = ‘http://www.bluebee.co.kr/reportTest.php’; $snoopy->httpmethod = “POST”; $report[‘sdate’] = ‘2019-11-01’; $report[‘edate’] = ‘2019-11-13’; $snoopy->submit($reportUri, $report); preg_match(‘/<tr class=”reportR”>(.*?)<\/tr>/is’, $snoopy->results, $result_report_tr); if(sizeof($result_report_tr) > 1) { preg_match_all(‘/<td[^>]*>(.*?)<\/td>/is’, $result_report_tr[1], $result_report_td); /*데이터 정리*/ } } ?> 로그인이 필요한 경우 간편하게~ 대충 이런 형태로 간단하게 뽑아낼 수 있겠다.   오류 발생 대처 방법 PHP Deprecated: The each() function is deprecated. php버전에 따라 오류발생 가능 Snoopy.class.php 의 each 관련 사항을 모두 foreach로 수정 예) while (list($key, $val) = each($links[2])) { => foreach($links[2] as $key => $val) { 그외 딱히 이슈될건 없다.