PHP Web ページ分析コンテンツ クローラー ファイル分析
//すべてのコンテンツ URL を取得し、ファイルに保存します
function get_index($save_file, $prefix="index_"){
$count = 68;
$ i = 1;
if (file_exists($save_file)) @unlink($save_file);
$fp = fopen($save_file, "a+") または die("Open ". $save_file ." failed" );
while($i<$count){
$url = $prefix . $i .".htm";
echo ". $url ."...";
$ url_str = get_content_url(get_url($url));
echo "OKn";
fwrite($fp, $url_str);
++$i;
}
fclose( $fp );
}
//ターゲットのマルチメディア オブジェクトを取得します
function get_object($url_file, $save_file, $split="|--:**:--|"){
if (!file_exists($url_file)) die($url_file ." 存在しません");
$file_arr = file($url_file);
if (!is_array($file_arr) || empty( $file_arr) ) die($url_file ." not content");
$url_arr = array_unique($file_arr);
if (file_exists($save_file)) @unlink($save_file);
$fp = fopen( $save_file, "a+") または die("保存ファイルを開く ". $save_file ." 失敗しました");
foreach($url_arr as $url){
if (empty($url))続行;
echo "Get ". $url ."...";
$html_str = get_url($url);
echo $html_str;
echo $url;
exit;
$obj_str = get_content_object($html_str);
echo " OKn";
fwrite($fp, $obj_str);
}
fclose($fp);
}
//ディレクトリをトラバースしてファイルの内容を取得します
function get_dir($save_file, $dir){
$dp = opendir($dir);
if (file_exists($save_file) ) @unlink($save_file );
$fp = fopen($save_file, "a+") または die("保存ファイルを開く ". $save_file ." 失敗しました");
while(($file = readdir ($dp)) ! = false){
if ($file!="." && $file!=".."){
echo "ファイル ". $file ."..." ;
$file_content = file_get_contents ($dir . $file); 🎜> }
fclose($fp);
}
// 指定された URL コンテンツを取得します
function get_url($url){
$reg = '/^http:/ /[^/].+$/';
if (!preg_match($reg, $url)) die($url ." 無効です");
$fp = fopen($url, "r" ) または die("URL を開く: ". $url ." に失敗しました。");
while($fc = fread($ fp、8192)){
$content .= $fc;
}
fclose($fp);
if (empty($content)){
die("URL を取得: ". $url ." コンテンツが失敗しました。");
}
return $content;
}
//ソケットを使用して指定された Web ページを取得します
function get_content_by_socket($ url, $host){
$fp = fsockopen($host, 80) または die(" Open ". $url ." failed");
$header = "GET /".$url ." HTTP /1.1rn";
$header .= "Accept: */*rn";
$header .= "Accept-Language: zh-cnrn";
$header .= "Accept-Encoding: gzip, deflatern";
$header .= "ユーザー エージェント: Mozilla/4.0 (互換性; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; InfoPath.1; .NET CLR 2.0.50727)rn";
$header .= "ホスト: ". $host ."rn";
$header . = "接続: Keep-Alivern";
//$header .= "Cookie: cnzz02=2; rtime= 1; ltime=1148456424859; cnzz_eid=56601755-rnrn";
$header .= "接続: 閉じるrnrn";
fwrite($fp, $header);
while (!feof($fp)) {
$contents .= fgets($fp, 8192);
}
fclose($ fp);
return $contents;
}
//获取指定コンテンツ里のurl
function get_content_url($host_url, $file_contents){
//$reg = '/^(#|javascript.*?|ftp://.+|http://.+|.*?href.*?|play.*?|index.*?|.* ?asp)+$/i';
//$reg = '/^(down.*?.html|d+_d+.htm.*?)$/i';
$rex = "/ ([hH][rR][eE][Ff])s*=s*['"]*([^>'"s]+)["'>]*s*/i";
$reg = '/^(down.*?.html)$/i';
preg_match_all ($rex, $file_contents, $r);
$result = "";
foreach($r as $c){
if (is_array($c)){
foreach($c as $d){
if (preg_match($reg, $d)) { $result .= $host_url . $d."n"; }
}
}
}
return $result;
}
//中的マルチメディア文件
function get_content_object($str, $split="|--:**:--|"){
$regx = "/hrefs*=s*['"]*([ ^>'"s]+)["'>]*s*(.*?)/i";
preg_match_all($regx, $str, $result) ;
if (count($result) == 3){
$result[2] = str_replace("マルチメディア: ", "", $result[2]);
$result[2] = str_replace("", "", $result[2]);
$result = $result[1][0] 。 $split .$result[2][0] 。 "n";
}
return $result;
}
?>
//PHP 访问网页
$ page = '';
$handler = fopen('http://www.baidu.com','r');
while(!feof($handler)){
$page.= fread($handler,1048576);
}
fclose($handler);
echo $page;
?>
2: この面が正しいかどうか判断します报错页面
/**
* $host サーバーアドレス
* $get リクエストページ
* *
*/
function getHttpStatus($host,$get="") {
$fp = fsockopen($host, 80);
if (!$fp) {
$res= -1;
} else {
fwrite($fp, "GET /".$get." HTTP/1.0rnrn");
stream_set_timeout($fp, 2);
$res = fread($fp, 128);
$info = stream_get_meta_data($fp);
fclose($fp);
if ($info['timed_out']) {
$res=0;
} else {
$res= substr($res,9,3);
}
}
return $res;
}
$good=array("200","302");
if(in_array(getHttpStatus("5y.nuc.edu.cn","/"),$good)) {
echo " 通常";
} else {
echo getHttpStatus("5y.nuc.edu.cn","/");
}
if(in_array(getHttpStatus("5y.nuc.edu.cn","/error.php"),$good)) {
echo " 通常";
} else {
echo getHttpStatus("5y.nuc.edu.cn","/error.php");
}
?>
Return
最初のものが "normal" を返します。 >2 番目のものは存在せず、「404」を返します
function getHttpStatus($host,$get="") {
//Web ページにアクセスしてサーバーのステータス コードを取得します
$ fp = fsockopen($host , 80);
if (!$fp) {
$res= -1;
} else {
fwrite($fp, "GET /" .$get." HTTP /1.0rnrn");
stream_set_timeout($fp, 2);
$info = stream_get_meta_data($fp); 🎜> fclose($fp );
if ($info['timed_out']) {
$res= substr( $res,9,3);
}
return $res;
}
echo getHttpStatus("5y.nuc.edu.cn","/"); net","Expert/topic/4758/4758574.xml?temp=.1661646");
Return
1 サーバーに接続できません
0 タイムアウト
200 OK (return成功しました)
302 見つかりました (見つかりました)
404 見つかりません
...
//すべての Web ページを走査します ($type はタイプを指定します) )
function getAllPage($path="./",$type=array("html","htm")) {
global $p;
if ($handle = opendir($path) ) {
while (false !== ($file = readdir($handle))) {
if(is_dir($file) && $file!="." && $file!=".." ) {
getAllPage($path.$file."/",$type)
If(in_array (strto lower($ex) ,$type)) { >}
} 🎜 >$p=array();
getAllPage("./");
print_r($p);
echo ""; ;
?>
//ページコンテンツ内のすべての URL をキャッチします。
$str='2006 年 5 月 30 日 15:13:00 | コメント (0)';
preg_match_all("/href="([^"]*.*php[^"]*)"/si",$str,$m); //すべてのタイプの URL を取得するには次を使用します。 🎜>//preg_match_all("/href="([^"]*)"/si",$str,$m);
print_r($m[1]);
?> ;
リンクに get パラメータを含むアドレスが含まれます
$str=file_get_contents("http://www.php.net");
preg_match_all( " /href="([^"]*.*php?[^"]*)"/si",$str,$m);
print_r($m[1]);
?> ;