php爬虫

 Stardustsky   2015-01-27 13:19   2706 人阅读  0 条评论

好久没更新日志了,最近做了只php爬虫,不过因为php不支持多线程,然后设置的最大时延又只有30秒,导致无法整站爬取,所以挺郁闷的,不过爬一个页面的URL到还行,后期再做些改进吧……

<div align="center"><h1>php爬虫</h1></div>
<form action="" method="post">
<div align="center">请输入要爬取的url:<input type="text" value="" name="target"><input type="submit" value="开始爬" name="btn"></div>
</form>
<?php

#加载页面
function curl_get($url){
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_HEADER,1);
    $result=curl_exec($ch);
    $code=curl_getinfo($ch,CURLINFO_HTTP_CODE);
    if($code!='404'&& $result){
  echo "url存在,开始爬行……"."</br><hr>";
    return $result;
    }else{
    echo "给我个不存在的url,你一定是在逗我……";
    }
    curl_close($ch);
}

#爬取页面内的所有链接
function curl_link($base_url){
$all_url_list=array(1);
$url_link=preg_match_all("/href=[\'|\"][\w\.\/\?\(\)=%_&#@:-]+[\'|\"]/",$base_url, $matches);//
if($url_link){
$link_list=$matches[0];
$link_list=str_replace('href="','', $link_list);
$link_list=str_replace("href='","", $link_list);
$link_list=str_replace('"','', $link_list);
$link_list=str_replace("'","", $link_list);
foreach ($all_url_list as $key) {
foreach($link_list as $list){
if(strpos($key, $list)==false){
echo $list."</br>";
//$list=curl_get($list);
curl_link($list);
}
}
}sleep(0.1);
$all_url_list=array_merge($all_url_list,$link_list);                                      //将抓取url存入$all_user_list
return $link_list;
}
else{
return;
}
}

#去除其他站点
function curl_del_other($base_url,$link_list){
foreach ($link_list as $value) {
if(strpos($value, $base_url)!==false){
//echo $value."</br>";
$filter_link_list[]=$value;
}
}
return $filter_link_list;
}

#去除重复地址
function curl_del_same($link_list){
$link_unsame_list=array_flip(array_flip($link_list));
//print_r($link_list);
return $link_unsame_list;
}

#进行爬行操作
if(isset($_POST['btn'])){
$base_url=$_POST['target'];
$grap=curl_get($base_url);
$list=curl_link($grap);
$filter_link_list=curl_del_other($base_url,$list);
$first_scan=curl_del_same($filter_link_list);
foreach ($first_scan as $value) {
echo $value."</br>";
}
}
?>


本文地址:http://www.stardustsky.net/index.php/post/18.html
版权声明:本文为原创文章,版权归 Stardustsky 所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?