Php 删除页面并将内部链接与外部链接分离
构建一个小小的PHP刮刀,我正在编写一个小小的函数,它应该将我的内部和外部链接分开 我将向函数传递html源代码的副本以及基本主机地址Php 删除页面并将内部链接与外部链接分离,php,dom,web-scraping,Php,Dom,Web Scraping,构建一个小小的PHP刮刀,我正在编写一个小小的函数,它应该将我的内部和外部链接分开 我将向函数传递html源代码的副本以及基本主机地址 $source = file_get_contents('http://www.example.com'); $host = "mysite.com"; 这是我到目前为止的功能 function find_page_links($source, $host){ if($source){ $htmlDo
$source = file_get_contents('http://www.example.com');
$host = "mysite.com";
这是我到目前为止的功能
function find_page_links($source, $host){
if($source){
$htmlDoc = new DomDocument();
@$htmlDoc->loadhtml($source);
$int_links = array();
$ext_links = array();
// GET LINKS
foreach($htmlDoc->getElementsByTagName('a') as $link) {
$url = trim($link->getAttribute('href'));
$title = trim($link->getAttribute('title'));
$text = trim($link->nodeValue);
$rel = trim($link->getAttribute('rel'));
$pos = strpos($url,$host);
if( $pos === false ){ // NO MATCH EXTERNAL
if( (substr($url, 0, 1) == '/') ||
(substr($url, 0, 1) == '#') )
{
// INTERNAL
$int_links[] = array( 'link_url' => $url,
'link_text' => $text,
'link_title' => $title,
'link_rel' => $rel
);
}else{
// EXTERNAL
$ext_links[] = array( 'link_url' => $url,
'link_text' => $text,
'link_title' => $title,
'link_rel' => $rel
);
}
}else{
if( $pos < 20 ){
// INTERNAL
$int_links[] = array( 'link_url' => $url,
'link_text' => $text,
'link_title' => $title,
'link_rel' => $rel );
}else{
// EXTERNAL
$ext_links[] = array( 'link_url' => $url,
'link_text' => $text,
'link_title' => $title,
'link_rel' => $rel
);
}
} // end else
} // end foreach
$content = array();
$content['int_links'] = $int_links;
$content['ext_links'] = $ext_links;
return $content ;
}
}
因此,函数通过DomDocument加载HTML
我创建了两个阵列来存储内部和外部
循环浏览文档并获取elementsbytagname'a'
然后,它使用strpos检查主机地址example.com是否在链接URL内如果没有匹配/错误,那么它是外部的,但我们会进一步检查以确保链接URL不是以正斜杠开始的ie:/contact-us.php,这意味着它是内部的,此外,在该检查中,我们在开始处检查标记,该标记将是页面上的锚定链接
因此,如果pos===false/不匹配
现在,如果主机位于链接URL中,那么我将进行另一次检查,以查看主机的位置在字符串中是否较低,这将是内部ie:
但如果位置大于20,则仅从空中抽取一个数字,然后。。
就像google plus链接或facebook链接一样,主机url将出现在链接中,但沿着字符串的距离要远得多,这意味着它是一个外部链接
即:
呸
如果你们有其他更好的方法来发现外部或内部链接,请让我知道。我的结果因网站而异,如果链接使用完整路径,我编辑了这个问题的标签,但没有注意到这是一个老问题,因为有新用户挖了它并编辑了它的标题