php 의 Snoopy 사례 설명

5483 단어 phpSnoopy
php 의 Snoopy 클래스
요청 페이지 에 있 는 모든 링크 를 가 져 옵 니 다.fetchlinks 를 직접 사용 하면 됩 니 다.모든 텍스트 정 보 를 가 져 오 려 면 fetchtext(내부 에 서 는 정규 표현 식 으로 처리 합 니 다)를 사용 하 십시오.아 날로 그 제출 폼 등 다른 많은 기능 도 있 습 니 다.
사용 방법:
1.스 누 피 류 를 먼저 다운로드 하고 주소:http://sourceforge.net/projects/snoopy/
2.대상 을 예화 한 다음 에 해당 하 는 방법 으로 캡 처 한 웹 페이지 정 보 를 얻 을 수 있 습 니 다.
예시:

include 'snoopy/Snoopy.class.php';
$snoopy = new Snoopy(); 
$sourceURL = "http://xxxxxxxxx";
$snoopy->fetchlinks($sourceURL);
$a = $snoopy->results;
웹 페이지 의 모든 그림 주 소 를 가 져 오 는 방법 을 제공 하지 않 았 습 니 다.한 페이지 의 모든 글 목록 에 있 는 그림 주 소 를 가 져 오 는 것 이 필요 합 니 다.그리고 자신 이 하 나 를 썼 는데,주로 정규 에 맞 는 것 이 중요 하 다.

//          
 $reTag = "/<img[^s]+src=\"(http:\/\/[^\"]+).(jpg|png|gif|jpeg)\"[^\/]*\/>/i";
수요 가 특수 하기 때문에 죽은 htp://로 시작 하 는 그림 만 캡 처 해 야 합 니 다.(외부 사이트 의 그림 은 도 난 방지 체인 을 만 들 수 있 습 니 다.로 컬 을 먼저 캡 처 하려 고 합 니 다)
실현 방향:
1.지정 한 웹 페이지 를 캡 처 하고 예상 되 는 모든 글 주 소 를 선택 합 니 다.
2.첫 번 째 단계 의 글 주 소 를 반복 적 으로 캡 처 한 다음 그림 과 일치 하 는 정규 표현 식 으로 일치 시 켜 페이지 의 모든 규칙 에 맞 는 그림 주 소 를 가 져 옵 니 다.
3.그림 접미사 와 ID(여 기 는 gif,jpg 만 있 음)에 따라 그림 을 저장 합 니 다.이 그림 파일 이 존재 하면 먼저 삭제 하고 저장 합 니 다.

<meta http-equiv='content-type' content='text/html;charset=utf-8'>

<?php
    include 'snoopy/Snoopy.class.php';
    
    $snoopy = new Snoopy();
    
    $sourceURL = "http://xxxxx";
    $snoopy->fetchlinks($sourceURL);
    
    $a = $snoopy->results;
    $re = "/\d+\.html$/";
    
    //             
    foreach ($a as $tmp) {
        if (preg_match($re, $tmp)) {
            getImgURL($tmp);
        }
    }
    
    function getImgURL($siteName) {
        $snoopy = new Snoopy();
        $snoopy->fetch($siteName);
        
        $fileContent = $snoopy->results;
        
        //          
        $reTag = "/<img[^s]+src=\"(http:\/\/[^\"]+).(jpg|png|gif|jpeg)\"[^\/]*\/>/i";
        
        if (preg_match($reTag, $fileContent)) {
            $ret = preg_match_all($reTag, $fileContent, $matchResult);
            
            for ($i = 0, $len = count($matchResult[1]); $i < $len; ++$i) {
                saveImgURL($matchResult[1][$i], $matchResult[2][$i]);
            }
        }
    }
    
    function saveImgURL($name, $suffix) {
        $url = $name.".".$suffix;
        
        echo "       :".$url."<br/>";
        
        $imgSavePath = "E:/xxx/style/images/";
        $imgId = preg_replace("/^.+\/(\d+)$/", "\\1", $name);
        if ($suffix == "gif") {
            $imgSavePath .= "emotion";
        } else {
            $imgSavePath .= "topic";
        }
        $imgSavePath .= ("/".$imgId.".".$suffix);
        
        if (is_file($imgSavePath)) {
            unlink($imgSavePath);
            echo "<p style='color:#f00;'>  ".$imgSavePath."   ,    </p>";
        }
        
        $imgFile = file_get_contents($url);
        $flag = file_put_contents($imgSavePath, $imgFile);
        
        if ($flag) {
            echo "<p>  ".$imgSavePath."    </p>";
        }
        
    }
?>
php 로 웹 페이지 캡 처:내용,그림,링크 를 사용 할 때 가장 중요 한 것 은 정규(캡 처 한 내용 과 지 정 된 규칙 에 따라 원 하 는 데 이 터 를 얻 는 것)라 고 생각 합 니 다.사고방식 이 간단 하고 사용 하 는 방법 도 많 지 않 습 니 다.그 몇 가지(그리고 캡 처 내용 은 다른 사람 이 쓴 유형 에서 직접 호출 하면 됩 니 다)
그러나 이전에 생각 한 것 은 php 가 다음 과 같은 방법 을 실현 하지 못 한 것 같다.예 를 들 어 한 파일 에 N 줄(N 이 매우 크다)이 있 는데 그 중에서 규칙 에 부합 되 는 줄 의 내용 을 교체 해 야 한다.예 를 들 어 세 번 째 줄 은 aaa 가 bbbb 로 전환 해 야 한다.일반적인 파일 수정 이 필요 할 때 흔히 볼 수 있 는 방법:
1.전체 파일 을 한 번 에 읽 거나 한 줄 씩 읽 은 다음 임시 파일 을 사용 하여 최종 변환 결 과 를 저장 하고 원본 파일 을 교체 합 니 다.
2.한 줄 씩 읽 고 fseek 로 파일 포인터 의 위 치 를 제어 한 다음 fwrite 로 기록 합 니 다.
프로젝트 1 은 파일 이 클 때 한 번 에 읽 는 것 이 바람 직 하지 않 습 니 다(한 줄 씩 읽 은 다음 임시 파일 을 쓰 고 원본 파일 을 교체 하 는 것 도 효율 적 이지 않 습 니 다).프로젝트 2 는 교 체 된 문자열 의 길이 가 목표 값 보다 작 을 때 문제 가 없 지만 초과 하면 문제 가 있 습 니 다.다음 줄 의 데 이 터 를 흐 트 러 뜨 립 니 다(자바 스 크 립 트 에서'선택 영역'이라는 개념 이 있어 서 는 안 됩 니 다.새 내용 으로 바 꾸 기)
다음은 방안 2 를 사용 하여 시험 하 는 코드 입 니 다.

<?php
$mode = "r+";
$filename = "d:/file.txt";
$fp = fopen($filename, $mode);
if ($fp) {
 $i = 1;
 while (!feof($fp)) {
  $str = fgets($fp);
  echo $str;
  if ($i == 1) {
   $len = strlen($str);
   fseek($fp, -$len, SEEK_CUR);//      
   fwrite($fp, "123");
  }
  $i++;
 }
 fclose($fp);
}
?>
먼저 한 줄 을 읽 습 니 다.이때 파일 포인 터 는 다음 줄 로 시작 하 는 것 을 말 합 니 다.fseek 를 사용 하여 파일 포인 터 를 이전 줄 의 시작 위치 로 옮 긴 다음 에 fwrite 를 사용 하여 교체 작업 을 하 는 것 입 니 다.바로 교체 작업 이기 때문에 길 이 를 지정 하지 않 은 상태 에서 다음 줄 의 데이터 에 영향 을 주 고 제 가 원 하 는 것 은 이 줄 만 을 대상 으로 조작 하 는 것 입 니 다.예 를 들 어 이 줄 을 삭제 하거나 전체 줄 을 하나 로 만 바 꾸 는 것 입 니 다.위의 예 는 요구 에 미 치지 못 합 니 다.제 가 아직 적당 한 방법 을 찾 지 못 했 을 수도 있 습 니 다.좋 은 방법 이 있 습 니까?
php 의 Snoopy 사례 에 대한 설명 은 여기까지 입 니 다.php 에 관 한 더 많은 Snoopy 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기