PHP实现简单爬虫的方法
本文实例讲述了PHP实现简单爬虫的方法。分享给大家供大家参考。具体如下:
<?php
/**
*爬虫程序--原型
*
*从给定的url获取html内容
*
*@paramstring$url
*@returnstring
*/
function_getUrlContent($url){
$handle=fopen($url,"r");
if($handle){
$content=stream_get_contents($handle,1024*1024);
return$content;
}else{
returnfalse;
}
}
/**
*从html内容中筛选链接
*
*@paramstring$web_content
*@returnarray
*/
function_filterUrl($web_content){
$reg_tag_a='/<[a|A].*?href=[\'\"]{0,1}([^>\'\"\]*).*?>/';
$result=preg_match_all($reg_tag_a,$web_content,$match_result);
if($result){
return$match_result[1];
}
}
/**
*修正相对路径
*
*@paramstring$base_url
*@paramarray$url_list
*@returnarray
*/
function_reviseUrl($base_url,$url_list){
$url_info=parse_url($base_url);
$base_url=$url_info["scheme"].'://';
if($url_info["user"]&&$url_info["pass"]){
$base_url.=$url_info["user"].":".$url_info["pass"]."@";
}
$base_url.=$url_info["host"];
if($url_info["port"]){
$base_url.=":".$url_info["port"];
}
$base_url.=$url_info["path"];
print_r($base_url);
if(is_array($url_list)){
foreach($url_listas$url_item){
if(preg_match('/^http/',$url_item)){
//已经是完整的url
$result[]=$url_item;
}else{
//不完整的url
$real_url=$base_url.'/'.$url_item;
$result[]=$real_url;
}
}
return$result;
}else{
return;
}
}
/**
*爬虫
*
*@paramstring$url
*@returnarray
*/
functioncrawler($url){
$content=_getUrlContent($url);
if($content){
$url_list=_reviseUrl($url,_filterUrl($content));
if($url_list){
return$url_list;
}else{
return;
}
}else{
return;
}
}
/**
*测试用主程序
*/
functionmain(){
$current_url="http://hao123.com/";//初始url
$fp_puts=fopen("url.txt","ab");//记录url列表
$fp_gets=fopen("url.txt","r");//保存url列表
do{
$result_url_arr=crawler($current_url);
if($result_url_arr){
foreach($result_url_arras$url){
fputs($fp_puts,$url."\r\n");
}
}
}while($current_url=fgets($fp_gets,1024));//不断获得url
}
main();
?>
希望本文所述对大家的php程序设计有所帮助。