>  기사  >  백엔드 개발  >  스누피의 소개와 활용

스누피의 소개와 활용

WBOY
WBOY원래의
2016-08-08 09:24:271914검색

Snoopyphp 클래스로, 브라우저의 기능을 시뮬레이션하고 웹 콘텐츠를 얻고 양식을 보낼 수 있습니다. 스누피가 올바르게 작동하려면 서버의 PHP 버전이 4이어야 합니다. PCRE(Perl 호환 정규 표현식), 기본 LAMP을 지원합니다. 서비스 모두 지원됩니다. 스누피 클래스 공식 다운로드 주소는 http://snoopy.sourceforge.net/1입니다. 🎜> 스누피의 일부 기능:1.웹페이지 콘텐츠 가져오기 가져오기2.웹페이지의 텍스트 콘텐츠 가져오기(제거 HTML태그) fetchtext3.웹페이지 링크 가져오기, 양식 fetchlinks fetchform4.프록시 호스트 지원5.기본 사용자 이름 지원 /비밀번호 확인6.지원 설정user_agent,referer(출처 ), 쿠키헤더 콘텐츠(헤더조각)7.브라우저 리디렉션을 지원하고 리디렉션 깊이를 제어할 수 있습니다8.Can 웹의 링크 페이지는 고품질 url(default)9.제출로 확장됩니다. 데이터 및 반환 값 가져오기10.추적 지원HTML프레임워크 11.리디렉션 시 쿠키 전달을 지원합니다. php4 이상이 필요합니다. 예, 그렇습니다. php 클래스인 경우 지원을 확장할 필요가 없습니다. 서버가 curl을 지원하지 않는 경우 최선의 선택입니다. 2. 클래스 메소드 :fetch($URI) 이는 웹 페이지 크롤링을 위한 것입니다. 콘텐츠에 사용되는 방법입니다. $URI 매개변수는 크롤링된 웹페이지의 URL 주소입니다. 가져온 결과는 $this->results에 저장됩니다. 잡는 것이 프레임인 경우 Snoopy는 각 프레임을 추적하여 배열에 저장한 다음 $this-> . fetchtext($URI) 이 방법은 fetch()와 유사하다는 점만 다릅니다. 메소드는 HTML 태그 및 기타 관련 없는 데이터를 제거하고 웹페이지의 텍스트 콘텐츠만 반환합니다. fetchform($URI) 이 방법은 fetch()와 유사하다는 점만 다릅니다. 메소드는 HTML 태그 및 기타 관련 없는 데이터를 제거하고 웹 페이지의 양식 콘텐츠 (form)만 반환합니다. fetchlinks($URI) 이 방법은 fetch()와 유사하다는 점만 다릅니다. 메소드는 HTML 태그 및 기타 관련 없는 데이터를 제거하고 웹페이지의 링크 (link)만 반환합니다. 기본적으로 상대 링크는 자동으로 완성되어 전체 URL으로 변환됩니다. submit($URI,$formvars) 이 메소드는 $URL에서 지정한 링크 주소로 확인 양식을 보냅니다. . $formvars는 양식 매개변수를 저장하는 배열입니다. submittext($URI,$formvars) 이 방법은 submit()과 유사하지만 유일한 차이점은 이 방법은 HTML 태그 및 기타 관련 없는 데이터를 제거하고 로그인 후 웹페이지의 텍스트 콘텐츠만 반환합니다. submitlinks($URI) 이 방법은 submit()과 유사하다는 점만 다릅니다. 메소드는 HTML 태그 및 기타 관련 없는 데이터를 제거하고 웹페이지의 링크 (link)만 반환합니다. 기본적으로 상대 링크는 자동으로 완성되어 전체 URL으로 변환됩니다.3. 클래스 속성: (기본값은 괄호 안에 있습니다)$host 연결된 호스트$port 연결된 포트$proxy_host 사용할 프록시 호스트(있는 경우) $ Proxy_port 사용할 프록시 호스트 포트(있는 경우)$agent 위장 (Snoopy v0.1)$ 리퍼러 리퍼러 정보(있는 경우)$cookiescookies(있는 경우)$rawheaders 기타 헤더 정보 , 있는 경우$maxredirs 최대 리디렉션 수, 0=허용되지 않음 (5)$offsiteok 오프사이트 리디렉션을 허용할지 여부(true)$expandlinks 전체 주소에 대한 모든 링크를 완료할지 여부 (true)$user 인증 사용자 이름, if yes$pass 인증 사용자 이름, 그렇다면$accept http 수락 유형 (image/gif, image/x -xbitmap, image/jpeg, image/pjpeg, */*)$error 오류 보고 위치, 있는 경우$response_code 서버에서 반환된 응답 코드$headers 서버에서 반환된 헤더 정보 $ maxlength 최대 반환 데이터 길이$read_timeout 읽기 작업 시간 제한(PHP 4 Beta 4+ 필요)을 다음으로 설정 시간 초과가 없는 경우 0 $timed_out 읽기 작업 시간이 초과된 경우 이 속성은 true를 반환합니다(PHP 4 Beta 4 필요). +)$maxframes 추적에 허용되는 최대 프레임 수 $status 캡처된 상태 http $temp_dir 웹 서버가 쓸 수 있는 임시 파일 디렉터리 (/tmp)$ cur_path cURL 바이너리 디렉토리 , cURL 바이너리 가 없으면 false 4. 다음은 데모복사 코드include "Snoopy .class.php";$입니다. snoopy = 새로운 스누피;$snoopy->proxy_host = "www.phpoac.com";$snoopy-> Proxy_port = "8080";$ snoopy->agent = "(호환; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)";$snoopy->referer = "http://www.phpoac.com/"; $snoopy->cookies["SessionID"] = 238472834723489l;$snoopy->cookies["favoriteColor"] = "RED";$snoopy ->rawheaders["Pragma"] = "캐시 없음";$snoopy->maxredirs = 2; $snoopy->offsiteok = false;$snoopy->expandlinks = false;$snoopy->user = "joe";$snoopy- >pass = "bloe";if($snoopy->fetchtext("http://www.phpoac.com")){echo "

".htmlspecialchars($snoopy-&gt ;결과)." 
n"
}
else
echo "문서 가져오기 오류: ".$snoopy->error."n";snoopy 컬렉션phpoac예제코드 복사//컬렉션php오픈 소스 네트워크set_time_limit(0);require_once("Snoopy.class.php"); $snoopy=new Snoopy();//포럼에 로그인$submit_url = "http://www.phpoac.com/bbs/ login.php?action=login";$submit_vars["loginmode"] = "normal";$submit_vars["styleid"] = "1";$submit_vars[ "cookietime"] = "315360000";$submit_vars["loginfield"] = "username";$submit_vars["username"] = "***" ; //귀하의 사용자 이름$submit_vars["password"] = "*****"; //귀하의 비밀번호$ submit_vars ["questionid"] = "0";$submit_vars["answer"] = "";$submit_vars["loginsubmit"] = "제출 ";$snoopy->submit($submit_url,$submit_vars);if ($snoopy->results){ //연결 주소 가져오기$snoopy->fetchlinks("http://www.phpoac.com/bbs");$url=array();$url=$snoopy->results;//print_r($url);foreach($url as $ key=>$value){//일치http://www.phpoac.com/bbs/forumdisplay.php?fid=156&sid= VfcqTR 주소는 포럼 섹션 주소입니다if(!preg_match("/^(http://www.phpoac.com/bbs/forumdisplay.php?fid=)[0 -9] *&sid=[a-zA-Z]{6}/i",$value)){unset($url[$key]);}}//print_r($url);//플레이트 배열 가져오기 $url, 루프 액세스, 이것은 $i=0;foreach ($url as $key=>$value) {if ($i>=1){//테스트 제한break; }else{//이 모듈에 액세스하여 게시물의 링크 주소를 추출해야 합니다. 포스트 페이지네이션 데이터를 추출한 후 페이지네이션 데이터에 따라 포스트 데이터를 추출합니다$snoopy=new Snoopy();$snoopy->fetchlinks($ 값);$tie=array( );$tie[$i]=$snoopy->results;//print_r($tie); //배열 변환foreach ($tie[$i] as $key=>$value){//일치 http://www.phpoac.com/bbs/viewthread.php?tid=68127&extra=page%3D1&page=1&sid=iBLZfK if (!preg_match("/^(http://www .phpoac.com/bbs/viewthread.php?tid=)[0-9]*&extra=page%3D1&page=[0-9]*&sid=[a -zA-Z]{6}/i",$value )){unset($tie[$i][$key]);} }/ /print_r($tie[$i]);//카테고리 배열, 동일한 게시물의 다른 페이지 내용을 배열$left= '';//왼쪽에 공개 주소 연결$j=0;$ page=array();foreach($tie[ $i] as $key=>$value){$left=substr($value, 0,52);$m=0;foreach($tie[$i] as $pkey=>$pvalue){//배열 재구성if (substr($pvalue,0,52)==$left){$page[ $j][$m]=$pvalue; $m++;}}$j++;} //중복 제거 시작//$page=array_unique($page);1차원 배열에만 사용할 수 있습니다$paget[0]=$page[0];$nums=count($page);for ($n=1;$n <$ 숫자;$n++){ $paget[$n]=array_diff($page[$n],$page[$n-1]); }//다차원 배열에서 중복 값 제거 종료//배열에서 빈 값 제거 unset($page); $page=array();//재정의페이지배열$page=array_filter($paget );//print_r($page);$u=0;$title=array();$content=array ();$temp='';$tt=array();foreach($page as $key= >$value) {//포스트에 대한 주변 루프if (is_array($value)){foreach ($value as $k1=>$v1){//인페이지 루프, 게시물의 N 페이지$snoopy=new Snoopy();$snoopy->fetch($v1);$temp=$snoopy- >results;//제목 읽기if (!preg_match_all("/

(.*) < ;/h2>/i" ,$temp,$tt)){echo "제목 없음";exit;}else{$title[$u]=$tt[1][1];}설정 해제( $tt); //콘텐츠 읽기if (!preg_match_all("/
(.*)
/i",$temp,$tt))
{print_r($tt); echo "콘텐츠 없음1";exit;}else{foreach($tt[1 ] $c=> ;$c2){$content[$u].=$c2;}}}}else{//페이지 콘텐츠 직접 가져오기$snoopy=새 스누피( );$snoopy->fetch($value);$temp=$snoopy->results;// 제목 읽기if (!preg_match_all("/

(.*)

/i",$temp,$tt))
{echo "제목 없음";exit;}else{$ title[$u]= $tt[1][1];}unset($tt);//콘텐츠 읽기 if (!preg_match_all("/
(.*)
/i",$temp, $tt))
{echo "콘텐츠 없음2";exit;}else{ foreach($tt[1], $c=>$c2){$content[$u].=$c2;} }}$u++;}print_r($content); }$i++;}}else{echo "login 실패함";종료;}?>

이상에서는 스누피의 소개와 사용법을 그 측면까지 포함하여 소개하였습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.