php 데이터 수집 에 대한 상세 한 설명

6473 단어 php데이터 수집
phop 채집 에 사용 할 수 있 는 좋 은 도구 두 개 를 소개 합 니 다.하 나 는 Snoopy,하 나 는 simplehtml_dom。채집 에는 여러 가지 방법 이 있 습 니 다.(사실은 본질 은 2-3 가지 이 고 다른 것 은 모두 파생 된 것 입 니 다)phop 은 몇 가지 방법 을 가지 고 직접 채집 할 수 있 습 니 다.하지만 게 으 름 을 끝까지 하 겠 다 는 정신 에서 다.우 리 는 이 두 가지 도 구 를 통 해 채집 을 더욱 간단하게 할 수 있다.인터넷 상에 서 스 누 피 를 소개 하 는 것 이 적지 않다.다음은 다른 사람 이 번역 한 스 누 피의 SDK///////////////////////////////////////////////////////////////스 누 피 는 php 류 로 브 라 우 저의 기능 을 모 의 하여 웹 페이지 내용 을 얻 고 폼 을 보 낼 수 있다.Snoopy 의 일부 특징:1 웹 페이지 의 내용 을 캡 처 합 니 다 fetch 2 웹 페이지 의 텍스트 내용 을 캡 처 합 니 다(HTML 탭 제거)fetchtext 3 캡 처 웹 페이지 의 링크,폼 fetchlinks fetchform 4 지원 프 록 시 호스트 5 지원 기본 사용자 이름/비밀번호 검증 6 지원 설정 user에이전트,referer(경로),cookies 와 header content(헤더 파일)7 은 브 라 우 저 재 설정 을 지원 합 니 다.또한 웹 페이지 의 링크 를 고 품질의 url(기본 값)9 로 확장 하여 데 이 터 를 제출 하고 반환 값 10 을 가 져 올 수 있 습 니 다.클래스 방법:fetch($URI)―C 이것 은 웹 페이지 의 내용 을 캡 처 하기 위해 사용 하 는 방법 입 니 다.$URI 인 자 는 캡 처 된 웹 페이지 의 URL 주소 입 니 다.캡 처 한 결 과 는$this->results 에 저 장 됩 니 다.프레임 워 크 를 캡 처 하고 있다 면,Snoopy 는 모든 프레임 워 크 를 추적 해서 배열 에 저장 한 다음$this->results 를 저장 합 니 다.fetchtext($URI)―이 방법 은 fetch()와 유사 하 며,유일 하 게 다른 것 은 이 방법 이 HTML 태그 와 다른 무관 한 데 이 터 를 제거 하고 웹 페이지 의 텍스트 내용 만 되 돌려 주 는 것 이다.fetchform($URI)―이 방법 은 fetch()와 유사 하 며,유일 하 게 다른 것 은 이 방법 이 HTML 태그 와 다른 무관 한 데 이 터 를 제거 하고 웹 페이지 의 폼 내용(form)만 되 돌려 주 는 것 이다.fetchlinks($URI)――이 방법 은 fetch()와 유사 하 며,유일 하 게 다른 것 은 이 방법 이 HTML 태그 와 다른 무관 한 데 이 터 를 제거 하고 웹 페이지 의 링크(link)만 되 돌려 주 는 것 이다.기본 적 인 상황 에서 상대 링크 는 자동 으로 완성 되 고 완전한 URL 로 변 환 됩 니 다.submit($URI,$formvars)―――-이 방법 은$URL 이 지정 한 링크 주소 에 확인 표를 보 냅 니 다.$formvars 는 폼 매개 변 수 를 저장 하 는 배열 입 니 다.submittext($URI,$formvars)―――C 본 방법 은 submit()와 유사 하 며,유일 하 게 다른 것 은 HTML 태그 와 다른 무관 한 데 이 터 를 제거 하고 로그 인 후 웹 페이지 의 문자 내용 만 되 돌려 주 는 것 이다.submitlinks($URI)――이 방법 은 submit()와 유사 하 며,유일 하 게 다른 것 은 이 방법 이 HTML 태그 와 다른 무관 한 데 이 터 를 제거 하고 웹 페이지 의 링크(link)만 되 돌려 주 는 것 이다.기본 적 인 상황 에서 상대 링크 는 자동 으로 완성 되 고 완전한 URL 로 변 환 됩 니 다.클래스 속성:(괄호 안에 결 성 된 값)$host 로 연 결 된 호스트$port 로 연 결 된 포트$proxyhost 에서 사용 하 는 프 록 시 호스트,있 으 면$proxyport 에서 사용 하 는 프 록 시 호스트 포트 입 니 다.있 으 면$에이전트 사용자 프 록 시 위장(Snoopy v 0.1)$referer 경로 정보,있 으 면$cookies cookies,있 으 면$rawheaders 다른 헤더 정보,있 으 면$maxrediers 최대 방향 변경 횟수,0=허용 되 지 않 음(5)$offsiteok whether or not to allow redirects of-site.(true)$expandlinks 링크 를 전체 주소(true)$user 인증 사용자 이름 으로 보완 할 지 여부,있 으 면$pass 인증 사용자 이름,있 으 면$accept http 수용 형식(image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*)$error 어디 가 잘못 되 었 습 니까?있 으 면$responsecode 서버 에서 돌아 오 는 응답 코드$headers 서버 에서 돌아 오 는 헤더 정보$maxlength 최 장 데이터 길이$readtimeout 읽 기 동작 시간 초과(requires PHP 4 Beta 4+)0 을 시간 초과 없 음$timed 으로 설정out 읽 기 동작 이 시간 을 초과 하면 이 속성 은 true(requires PHP 4 Beta 4+)$maxframes 에서 추적 할 수 있 는 프레임 워 크 의 최대 수량$status 에서 캡 처 한 http 의 상태$temp 를 되 돌려 줍 니 다.dir 웹 서버 가 쓸 수 있 는 임시 파일 디 렉 터 리(/tmp)$curlpath cURL binary 디 렉 터 리 는 cURL binary 가 없 으 면 false 로 설정 합 니 다.다음은 demo

include "Snoopy.class.php";
$snoopy = new Snoopy;
$snoopy->proxy_host = "www.7767.cn";
$snoopy->proxy_port = "8080";
$snoopy->agent = "(compatible; MSIE 4.01; MSN 2.5; AOL 4.0; Windows 98)";
$snoopy->referer = "http://www.7767.cn/";
$snoopy->cookies["SessionID"] = 238472834723489l;
$snoopy->cookies["favoriteColor"] = "RED";
$snoopy->rawheaders["Pragma"] = "no-cache";
$snoopy->maxredirs = 2;
 $snoopy->offsiteok = false;
$snoopy->expandlinks = false;
$snoopy->user = "joe";
 $snoopy->pass = "bloe";
if($snoopy->fetchtext("http://www.7767.cn"))
{
   echo "<PRE>".htmlspecialchars($snoopy->results)."</PRE>
";
}
else
echo "error fetching document: ".$snoopy->error."
";
//////////////////////////////////////////////////////다음은 simplehtml_dom 는 원 하 는 부분 을 꼼꼼 히 빼 냅 니 다.물론 정규 에 특히 뛰 어 나 고 정규 에 도 애착 이 있다 면 정규 에 맞 게 잡 을 수도 있다.simple_html_dom 은 사실 dom 해석 의 과정 이다.php 내부 에서 도 해석 방법 을 제 공 했 지만,이 simplehtml_dom 는 비교적 전문 적 이 고 한 가지 유형 으로 원 하 는 기능 을 많이 만족 시 켰 다 고 할 수 있 습 니 다./////////////////////////////////////////////////////////////////////////////////////URL 이나 파일 이름 으로 대상 문서 대상 을 만 듭 니 다.즉,대상 페이지$html=fileget_html ('http://www.7767.cn/' );//$html = file_get_html ('test.htm' );//대상 웹 페이지 로 문자열 을 사용 합 니 다.스 누 피 를 통 해 페이지 를 가 져 오고 여기 로 가 져 와$my html=str 를 처리 할 수 있 습 니 다.get_html ('Hello!' );// 모든 그림 을 찾 으 면 배열 foreach($html->find(img)as$element)를 되 돌려 줍 니 다.       echo $element->src . '
' ;// 모든 링크 foreach 찾기($html->find('a')as$element)       echo $element->href . '
' ;find 방법 은 매우 좋 습 니 다.보통 대상 을 포함 하 는 배열 로 돌아 갑 니 다.대상 요 소 를 찾 을 때 class 나 id 또는 다른 속성 을 통 해 대상 문자열 을 가 져 올 수 있 습 니 다./대상 div 의 class 속성 을 통 해 div 를 찾 습 니 다.find 방법 에서 두 번 째 인 자 는 그 배열 의 몇 번 째 인 자 를 되 돌려 줍 니 다.0 부터 첫 번 째$targetdiv = $html->find ('div.targetclass',0 );//결과 가 당신 이 원 하 는 것 인지 확인 하고 echo 를 직접 하면 됩 니 다 echo  $target_div;//중요 한 것 은 이 채집 대상 이 생 성 된 후에 반드시 소각 해 야 한 다 는 것 입 니 다.그렇지 않 으 면 phop 페이지 가 30 초 정도 걸 릴 수 있 습 니 다.이것 은 서버 의 그 시간 제한 에 달 려 있 습 니 다.소각 방법 은:$html->clear();unset($html);본인 생각 simplehtml_dom 가 비교적 우수한 점 은 채집 을 JS 처럼 쉽게 통제 하 는 것 이다.아래 에 제 공 된 다운로드 패키지 에는 영어 매 뉴 얼 simplehtmlom 이 있 습 니 다.1_11/simplehtmldom/manual/manual.htm
array$e->getAllAttributes ()
array$e->attr
string$e->getAttribute ( $name )
string$e->attribute
void$e->setAttribute ( $name, $value )
void$value = $e->attribute
bool$e->hasAttribute ( $name )
boolisset($e->attribute )
void$e->removeAttribute ( $name )
void$e->attribute = null
element$e->getElementById ( $id )
mixed$e->find ( "#$id", 0 )
mixed$e->getElementsById ( $id [,$index] )
mixed$e->find ( "#$id" [, int $index] )
element$e->getElementByTagName ($name )
mixed$e->find ( $name, 0 )
mixed$e->getElementsByTagName ( $name [, $index] )
mixed$e->find ( $name [, int $index] )
element$e->parentNode ()
element$e->parent ()
mixed$e->childNodes ( [$index] )
mixed$e->children ( [int $index] )
element$e->firstChild ()
element$e->first_child ()
element$e->lastChild ()
element$e->last_child ()
element$e->nextSibling ()
element$e->next_sibling ()
element$e->previousSibling ()
element$e->prev_sibling ()

좋은 웹페이지 즐겨찾기