使用PHP简单网页抓取和内容分析

原创 2006年05月31日 01:52:00

 

没事的时候想抓取点网页看看,也不太懂,只是玩玩,写了点代码,聊以娱乐。

稍微有点意义的函数是:get_content_by_socket(), get_url(), get_content_url(), get_content_object 几个函数,也许能够给你点什么想法。

<?php

//获取所有内容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+") or die("Open "$save_file ." failed"
);
    while(
$i<$count
){
        
$url $prefix $i .".htm"
;
        echo 
"Get "$url ."..."
;
        
$url_str get_content_url(get_url($url
));
        echo 
" OK/n"
;
        
fwrite($fp$url_str
);
        ++
$i
;
    }
    
fclose($fp
);
}

//获取目标多媒体对象
function get_object($url_file$save_file$split="|--:**:--|"
){
    if (!
file_exists($url_file)) die($url_file ." not exist"
);
    
$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+") or die("Open save file "$save_file ." failed"
);
    foreach(
$url_arr as $url
){
        if (empty(
$url
)) continue;
        echo 
"Get "$url ."..."
;
        
$html_str get_url($url
);
        echo 
$html_str
;
        echo 
$url
;
        exit;
        
$obj_str get_content_object($html_str
);
        echo 
" OK/n"
;
        
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+") or die("Open save file "$save_file ." failed"
);
    while((
$file readdir($dp)) != false
){
        if (
$file!="." && $file!=".."
){
            echo 
"Read file "$file ."..."
;
            
$file_content file_get_contents($dir $file
);
            
$obj_str get_content_object($file_content
);
            echo 
" OK/n"
;
            
fwrite($fp$obj_str
);
        }
    }
    
fclose($fp
);
}


//获取指定url内容
function get_url($url
){
    
$reg '/^http:////[^//].+$/'
;
    if (!
preg_match($reg$url)) die($url ." invalid"
);
    
$fp fopen($url"r") or die("Open url: "$url ." failed."
);
    while(
$fc fread($fp8192
)){
        
$content .= $fc
;
    }
    
fclose($fp
);
    if (empty(
$content
)){
        die(
"Get url: "$url ." content failed."
);
    }
    return 
$content
;
}

//使用socket获取指定网页
function get_content_by_socket($url$host
){
    
$fp fsockopen($host80) or die("Open "$url ." failed"
);
    
$header "GET /".$url ." HTTP/1.1/r/n"
;
    
$header .= "Accept: */*/r/n"
;
    
$header .= "Accept-Language: zh-cn/r/n"
;
    
$header .= "Accept-Encoding: gzip, deflate/r/n"
;
    
$header .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; InfoPath.1; .NET CLR 2.0.50727)/r/n"
;
    
$header .= "Host: "$host ."/r/n"
;
    
$header .= "Connection: Keep-Alive/r/n"
;
    
//$header .= "Cookie: cnzz02=2; rtime=1; ltime=1148456424859; cnzz_eid=56601755-/r/n/r/n";
    
$header .= "Connection: Close/r/n/r/n"
;

    
fwrite($fp$header
);
    while (!
feof($fp
)) {
        
$contents .= fgets($fp8192
);
    }
    
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 ""
//array();
    
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 "/href/s*=/s*['/"]*([^>'/"/s]+)[/"'>]*/s*(<b>.*?<//b>)/i"
;
    
preg_match_all($regx$str$result
);

    if (
count($result) == 3
){
        
$result[2] = str_replace("<b>多媒体: """$result[2
]);
        
$result[2] = str_replace("</b>"""$result[2
]);
        
$result $result[1][0] . $split .$result[2][0] . "/n"
;
    }
    return 
$result
;
}

?>

版权声明:本文为黑夜路人原创文章,未经允许请勿转载

使用PHP简单网页抓取和内容分析

 没事的时候想抓取点网页看看,也不太懂,只是玩玩,写了点代码,聊以娱乐。稍微有点意义的函数是:get_content_by_socket(), get_url(), get_content_url...
  • hejishan
  • hejishan
  • 2008年04月04日 14:17
  • 253

使用PHP简单网页抓取和内容分析

没事的时候想抓取点网页看看,也不太懂,只是玩玩,写了点代码,聊以娱乐。 稍微有点意义的函数是:get_content_by_socket(), get_url(), get_content_url()...
  • diaoguangqiang
  • diaoguangqiang
  • 2013年11月04日 08:43
  • 693

抓取Web网页数据分析

        通过程序自动的读取其它网站网页显示的信息,类似于爬虫程序。比方说我们有一个系统,要提取BaiDu网站上歌曲搜索排名。分析系统在根据得到的数据进行数据分析。为业务提供参考数据。  为了完...
  • jelink
  • jelink
  • 2006年08月25日 09:22
  • 1191

PHP算法分析

偶然间在网上看到了一篇文章《程序员必须知道的10大基础实用算法及其讲解》,发现一个不懂算法的程序猿算不上一个合格的猿,所以接下来的目标又多出了一个算法和数据结构。 本文的算法全部使用PHP语言实现。 ...
  • sinat_21125451
  • sinat_21125451
  • 2016年03月20日 11:57
  • 275

PHP网页抓取

用php抓取页面的内容在实际的开发当中是非常有用的,如作一个简单的内容采集器,提取网页中的部分内容等等,抓取到的内容在通过正则表达式做一下过滤就得到了你想要的内容,至于如何用正则表达式过滤,在这里就不...
  • RainyLin
  • RainyLin
  • 2011年05月18日 22:14
  • 2911

用php实现简单的登录和注册功能

最近在学习php··· 来实现简单的用户登录注册功能
  • wu_bangbang
  • wu_bangbang
  • 2016年05月11日 16:03
  • 1152

Php与python简单比较

就如各种其他语言一样,完完全全的讨论php和python哪种语言好是完全没有必要的,每种语言都有各自的优缺点,被使用的广泛程度则取决于他是是否迎合了时代的发展而已。使用的场景不同各种语言的适用程度也是...
  • In_computer
  • In_computer
  • 2015年10月16日 16:55
  • 3833

php bootstrap 实现简单登录

所有文件 记住是获取name键值对 from 里面 action就是你的动作signin.html ...
  • u014345282
  • u014345282
  • 2015年12月03日 11:41
  • 1492

内容分析

ETL
  • xiao_fu_ying
  • xiao_fu_ying
  • 2013年10月15日 22:39
  • 321

PHP简单的留言板

入口文件 文件名 index.php
  • luckymaoyy
  • luckymaoyy
  • 2016年11月30日 20:44
  • 1058
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用PHP简单网页抓取和内容分析
举报原因:
原因补充:

(最多只允许输入30个字)