前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[PHP] 广度优先搜索匹配网站所有链接

[PHP] 广度优先搜索匹配网站所有链接

作者头像
唯一Chat
发布2019-09-10 10:59:16
1K0
发布2019-09-10 10:59:16
举报
文章被收录于专栏:陶士涵的菜地陶士涵的菜地
代码语言:javascript
复制
<?php
define('PRE_DOMAIN','www');
define('DOMAIN','sina.com.cn');
define('PROTOCOL','https');
define('ROOT',PROTOCOL.'://'.PRE_DOMAIN.'.'.DOMAIN.'/');


foreach (spider() as $key => $value) {
    echo $value."\r\n";
}

function spider(){
    $headers=array(
        'user-agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    );
    $oUrls=parseURL(get(ROOT,$headers));
    $result=array();
    $queue=array();
    foreach($oUrls as $u){
        $result[$u]=true;
        array_push($queue,$u);
        while(!empty($queue)){
            $v=array_pop($queue);
            $temp=parseURL(get($v,$headers));
            foreach($temp as $j){
                    if(!isset($result[$j])){
                            yield $j;
                            $result[$j]=true;
                            array_push($queue,$j);
                    }   
            }   
        }   
    }
}
function get($url,$header=null){
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($header)){
        curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    }   
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 3);
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    $output = curl_exec($curl);

    $h = curl_getinfo($curl);
    if(!empty($h) && $h['http_code']==200 && stripos($h['content_type'],'text/html')===false){
        return "";
    }
    curl_close($curl);
    return $output;
 
}
function parseURL($content){
    preg_match_all('/<a.*href=["\']([^"\'>]*)["\'].*>/', $content,$matchs);
    if(empty($matchs[1])) return array();
    $match=$matchs[1];
    foreach ($match as $key => $value) {
        $flag=false;
        if(stripos($value, 'http')!==false && stripos($value,DOMAIN)===false){
            $flag=true;
        }
        if(stripos($value, '//')===0 && stripos($value,DOMAIN)!==false){
            $match[$key]='https:'.$value;
            continue;
        }
        if(stripos($value, '//')===0 && stripos($value,DOMAIN)===false){
            $flag=true;
        }
        if(stripos($value, 'javascript')===0||stripos($value, '#')===0){
            $flag=true;
        }
        if($flag){
            unset($match[$key]);
            continue;
        }
        if(stripos($value,DOMAIN)!==false){
            continue;
        }
        $match[$key]=ROOT.trim($value,'/');
    }
    return $match;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档