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 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.