스누피 기반 PHP는 웹사이트 코딩을 거의 완벽하게 획득합니다.
PHP 크롤러에 사용하면 코딩 정확도가 99.9%로 아직 얻을 수 없는 부분이 있으니 개선해주세요.
코드 소스:
Zhanyun.com
www.siteyun.com
먼저 인터넷에 접속하여 Snoopy.class.php를 다운로드하세요.
호출 방법: echo $go->getCharset();
?>
[코드]url=$url;
}
//打开网站
개인 함수 열기($url)
{
if($this->요청!==null)
{
if($this->요청->상태==200)
{
사실을 반환;
}
또 다른
{
거짓을 반환;
}
}
또 다른
{
$this->request=new 스누피();
$this->요청->가져오기($url);
if($this->요청->상태==200)
{
$this->요청->결과=strtolower($this->요청->결과);
$charset=$this->getCharset();
if($charset!="utf-8")
{
if($charset=="windows-1252")
{
$this->요청->결과=$this->uni_decode($this->요청->결과);
}
또 다른
{
$this->요청->결과=mb_convert_encoding($this->요청->결과,"UTF-8",$charset);
}
}
사실을 반환;
}
또 다른
{
거짓을 반환;
}
}
}
//获取网站제목,키워드,설명
공개 함수 getWebinfo()
{
$정보=배열(
'제목'=>'',
'키워드'=>'',
'설명'=>'',
'ip'=>''
);
if(!$this->open($this->url)){return $info;exit;}
// print_r($this->request->results);exit;
preg_match('/([^>]*)/si', $this->request->results, $titlematch );
if (isset($titlematch) && is_array($titlematch) && count($titlematch) > 0)
{
$info['title'] = Strip_tags($titlematch[1]);
}
preg_match_all('/"]*)"?[s]*' . 'content="?([^>"]*)"?[s]*[/]?[s]*>/si', $this->요청->결과, $match);
$ft=0;
foreach($match[1]를 $mt로)
{
if($mt=="키워드" || $mt=="설명")
{
$ft=1;
}
}
if($ft==0)
{
preg_match_all('/"]*)"?[s]*name="?' . '([^>"]*)"?[s]*[/]?[s]*>/si', $this->요청->결과, $match);
if (isset($match) && is_array($match) && count($match) == 3)
{
$originals = $match[0];
$names = $match[2];
$values = $match[1];
if (count($originals) == 개수($names) && count($names) == 개수($values))
{
$metaTags = 배열();
for ($i=0, $limiti=count($names); $i htmlentities($originals[$i]),
'값' => $값[$i]
);
}
}
}
}
또 다른
{
if (isset($match) && is_array($match) && count($match) == 3)
{
$originals = $match[0];
$names = $match[1];
$values = $match[2];
if (count($originals) == 개수($names) && count($names) == 개수($values))
{
$metaTags = 배열();
for ($i=0, $limiti=count($names); $i htmlentities($originals[$i]),
'값' => $값[$i]
);
}
}
}
}$결과 = 배열(
'metaTags' => $metaTags
);
if(isset($result['metaTags']['keywords']['value']))
{
$info['keywords']=$result['metaTags']['keywords']['value'];
}
또 다른
{
$info['키워드']="";
}
if(isset($result['metaTags']['description']['value']))
{
$info['desc']=$result['metaTags']['description']['value'];
}
또 다른
{
$info['desc']="";
}
$domain=preg_replace('/http:///si', '', $this->url);
$ip=@gethostbyname($도메인);
$ip_arr=폭발(".", $ip);
if(수($ip_arr)==4)
{
$info['ip']=$ip;
}
$정보를 반환합니다.
}
공개 함수 t($string,$o)
{
for($i=0;$iopen($this->url)){return false;exit;}
//首先从html获取编码
preg_match("/요청->결과,$temp) ? strtolower($temp[1]):"";
if($temp[1]!="")
{
if(in_array($temp[1], $this->charset_arr))
{
if($temp[1]=="gb2312")
{
$tmp_charset=$this->t($this->요청->결과,$temp[1]);
if($tmp_charset==$temp[1])
{
$temp[1] 반환;
}
}
또 다른
{
$temp[1] 반환;
}
}
}
if(!empty($this->요청->헤더))
{
//从header中获取编码
$hstr=strtolower(implode("
|