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

news/2024/7/8 6:13:24

 

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

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


//获取所有内容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*(.*? )/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
;
}

?>





http://www.niftyadmin.cn/n/3652456.html

相关文章

解决JSP出错:HTML中的列表不能正常显示

项目场景&#xff1a; JSP搭建在线图书管理系统。 问题描述&#xff1a; 首页的推荐图书列表不能正常显示&#xff0c;模糊查询目标书籍的搜索结果列表、借阅排行榜列表也不能正常显示。调用Dao中的方法&#xff0c;可以得到数据&#xff0c;数据库连接正常。推测为前端列表显…

数据库(二):数据查询之单表查询

单表查询 单表查询是指仅涉及一个表的查询。 参考书目&#xff1a;《数据库系统概论》第5版 王珊著 实验环境&#xff1a;ORACLE 实验语言&#xff1a;SQL 文章目录单表查询前言一、选择表中的若干列1.查询指定列2.查询全部列3.查询经过计算的值二、选择表中的若干元组1.消除取…

[转] 使用 DHTML 与 XML 制作 Ajax 幻灯片

使用 DHTML 与 XML 制作 Ajax 幻灯片Jack Herrington (jack_d_herringtoncodegeneration.net), 高级软件工程师, Code Generation Network2006 年 5 月 23 日学习如何创建通过 “Ken Burns Effects” 实现动画的 Ajax 客户端幻灯片放映。通过本文&#xff0c;您将了解如何创建 …

数据库(六):数据查询之基于派生表的查询

基于派生表的查询 子查询不仅可以出现在WHERE子句中&#xff0c;还可以出现在FROM子句中&#xff0c;此时子查询生成的临时派生表成为主查询的查询对象。 参考书目&#xff1a;《数据库系统概论》第5版 王珊著 实验环境&#xff1a;ORACLE、MySQL、Navicat 实验语言&#xff1a…

[转] 通过 PHP 和 Sajax 使用 Ajax(二)

通过 PHP 和 Sajax 使用 Ajax &#xff08;二&#xff09;简单 Ajax 工具包如何把服务器端 PHP 与 JavaScript 集成Tyler Anderson , 自由作者, Stexar 公司2006 年 05 月 11 日构建 PHP 应用程序这一节介绍使用 Ajax 创建 PHP 应用程序&#xff0c;程序将显示一个带有面板链接…

【计算机网络】思科实验(1):交换机的VLAN划分

系列文章目录 【计算机网络】思科实验(1)&#xff1a;交换机的VLAN划分 【计算机网络】思科实验(2)&#xff1a;交换机间的VLAN通信 【计算机网络】思科实验(3)&#xff1a;使用三层交换机实现跨VLAN间的通信 【计算机网络】思科实验(4)&#xff1a;综合实验作业之办公室的…

数据库(七):ORACLE数据库管理系统实验

ORACLE数据库管理系统实验 数据库&#xff08;一&#xff09;&#xff1a;数据定义 数据库&#xff08;二&#xff09;&#xff1a;数据查询之单表查询 数据库&#xff08;六&#xff09;&#xff1a;数据查询之基于派生表的查询 实验环境&#xff1a;ORACLE 文章目录ORACLE数…

[转] 通过 PHP 和 Sajax 使用 Ajax(三)

通过 PHP 和 Sajax 使用 Ajax &#xff08;三&#xff09;简单 Ajax 工具包如何把服务器端 PHP 与 JavaScript 集成Tyler Anderson , 自由作者, Stexar 公司2006 年 05 月 11 日与 Sajax 集成这一节将介绍什么是 Sajax&#xff0c;它如何模拟异步 JavaScript&#xff0c;以及当…