【问题标题】:PHP go after each link in page and links on linksPHP 跟踪页面中的每个链接和链接上的链接
【发布时间】:2011-11-22 00:23:18
【问题描述】:

我有一个函数,它使用 php 中的正则表达式从给定页面返回链接, 现在我想在找到的链接中查找每个链接,依此类推......

这是我的代码

function getLinks($url){
$content = file_get_contents($url);
preg_match_all("|<a [^>]+>(.*)</[^>]+>|U", $content, $links, PREG_PATTERN_ORDER);
$l_clean = array();
foreach($links[0] as $link){
        $e_link = explode("href",$link);
        $e_link = explode("\"",$e_link[1]);
        $f_link = $e_link[1];
        if( (substr($f_link,0,strlen('javascript:;')) != "javascript:;")){

            $sperator = "";

            $first = substr($f_link,0,1);
            if($first != "/"){
                $f_link = "/$f_link";
            }

            if(substr($f_link,0,7) != "http://"){
                $f_link = "http://" . $sperator . $_SERVER['HTTP_HOST'] . $f_link;              
            }
            $f_link = str_replace("///","//",$f_link);
            if(!in_array($f_link, $l_clean)){
                array_push($l_clean , $f_link);
            }
    }
}
}

【问题讨论】:

标签: php


【解决方案1】:

只需递归执行,并设置终止深度:

function getLinks($url, $depth){
    if( --$depth <= 0 ) return;
    $content = file_get_contents($url);
    preg_match_all("|<a [^>]+>(.*)</[^>]+>|U", $content, $links, PREG_PATTERN_ORDER);
    $l_clean = array();
    foreach($links[0] as $link){
            $e_link = explode("href",$link);
            $e_link = explode("\"",$e_link[1]);
            $f_link = $e_link[1];
            if( (substr($f_link,0,strlen('javascript:;')) != "javascript:;")){

                $sperator = "";

                $first = substr($f_link,0,1);
                if($first != "/"){
                    $f_link = "/$f_link";
                }

                if(substr($f_link,0,7) != "http://"){
                    $f_link = "http://" . $sperator . $_SERVER['HTTP_HOST'] . $f_link;              
                }
                $f_link = str_replace("///","//",$f_link);
                if(!in_array($f_link, $l_clean)){
                    array_push($l_clean , $f_link);
                    getLinks( $f_link, $depth );
                }
        }
    }
}

$links = getLinks("http://myurl.com", 3);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 2010-11-18
    • 2011-06-04
    • 2011-03-17
    相关资源
    最近更新 更多