如何从网页获取内部链接


How to fetch internal links from a webpage?

我使用XPath来解析HTML网页以获取所有内部链接。 DOMXPath将返回 href 中提供的所有链接。如何分离内部链接和外部链接?

我引入了一系列字符串检查来删除外部链接;但问题是有不同的方法可以链接内部页面,例如

    page.html
    /page.html
    http://domain.com/page.html
    http://subdomain.domain.com/page.html
    ....

区分内部链接(指向当前域及其子域的任何链接)和外部链接(指向任何其他域)的最安全方法是什么?

这是我

用preg_match写的一个小例子。让我知道它是否有帮助。

<?php
function get_a_href($url){
    $url = htmlentities(strip_tags($url));
    $ExplodeUrlInArray = explode('/',$url);
    $DomainName = $ExplodeUrlInArray[2];
    $file = @file_get_contents($url);
    $h1count = preg_match_all('/(href=["|''])(.*?)(["|''])/i',$file,$patterns);
    $linksInArray = $patterns[2];
    $CountOfLinks = count($linksInArray);
    $InternalLinkCount = 0;
    $ExternalLinkCount = 0;
    for($Counter=0;$Counter<$CountOfLinks;$Counter++){
     if($linksInArray[$Counter] == "" || $linksInArray[$Counter] == "#")
      continue;
    preg_match('/javascript:/', $linksInArray[$Counter],$CheckJavascriptLink);
    if($CheckJavascriptLink != NULL)
    continue;
    $Link = $linksInArray[$Counter];
    preg_match('/'?/', $linksInArray[$Counter],$CheckForArgumentsInUrl);
    if($CheckForArgumentsInUrl != NULL)
    {
    $ExplodeLink = explode('?',$linksInArray[$Counter]);
    $Link = $ExplodeLink[0];
    }
    preg_match('/'.$DomainName.'/',$Link,$Check);
    if($Check == NULL)
    {
    preg_match('/http:'/'//',$Link,$ExternalLinkCheck);
    if($ExternalLinkCheck == NULL)
    {
    $InternalDomainsInArray[$InternalLinkCount] = $Link;
    $InternalLinkCount++;
    }
    else
    {
    $ExternalDomainsInArray[$ExternalLinkCount] = $Link;
    $ExternalLinkCount++;
    }
    }
    else
    {
    $InternalDomainsInArray[$InternalLinkCount] = $Link;
    $InternalLinkCount++;
    }
    }
    $LinksResultsInArray = array(
    'ExternalLinks'=>$ExternalDomainsInArray,
    'InternalLinks'=>$InternalDomainsInArray
    );
    return $LinksResultsInArray;
    }
    ?>

使用 substr() 查看前 4 个字符是否为 http。

如果是这样,请使用 parse_url() 函数检查主机是否相同。如果不是,那就是内部的。