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程序设计有所帮助。