使用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()...

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

使用PHP简单网页抓取和内容分析展示了使用函数:get_content_by_socket(), get_url(), get_content_url(), get_content_object 抓取...

php网页抓取分析小应用

功能如下 对外提供接口 机票查询,航班查询,翻译【汉译英,英译汉,汉译日】 技术框架 php,simple_html_dom.php(一个第三方开源框架,解析html很方便),simplexml...
  • lxzo123
  • lxzo123
  • 2011年08月26日 18:51
  • 1800

jsoup网页内容分析

  • 2012年03月22日 16:19
  • 249KB
  • 下载

robit 根据抓取内容分析出源数据

  • 2011年08月15日 14:36
  • 12KB
  • 下载

PHP Snoopy网页抓取

Snoopy的一些特点: 1抓取网页的内容 fetch 2 抓取网页的文本内容 (去除HTML标签) fetchtext 3抓取网页的链接,表单 fetchlinks fetchform...

php 新浪通行证、新浪微博模拟统一登录 (后台网页抓取版) 2016

前几天做了一个Java的新浪通行证模拟登录测试。现在给大家一个php的新浪通行证、微博登录的示例:具体都有备注,大家阅读代码吧. ...

几种PHP实现网页抓取的程序代码

使用Google引擎搜索出这样的文章,不错,怕大家搜索不到,特此重新排版转载出来! 网页抓取就像搜索引擎一个可以去自动抓取其它服务器上的内容了,下面我整理的几个php常用做法,大家一起来看看。 ...
  • qqHJQS
  • qqHJQS
  • 2015年05月18日 20:14
  • 1269

自从有了Phantomjs和Casperjs,后台网页抓取和交互变得异常的简单

Casperjs是基于Phantomjs的,而Phantom JS是一个服务器端的 JavaScript API 的 WebKit。      这跟我一直想找个自带浏览器内核的后台东西的想法“...

Python3网络爬虫(一):利用urllib进行简单的网页抓取

运行平台:Windows10 Python版本:Python3.x IDE:Sublime text3
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用PHP简单网页抓取和内容分析
举报原因:
原因补充:

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