查找页面上与页面位于同一域的链接

时间:2014-06-06 10:31:00

标签: php web-crawler

我正在构建一个从网站的网页开始的抓取工具,例如example.com,并找到此页面上同一域中的所有链接。

假设我们在此页面上有example.com/hello.php,facebook.com/hello.php。所以我只想列出www.example.com/hello.php。

我正在使用PHP Simple HTML DOM Parser(simplehtmldom.sourceforge.net/)。

$html = file_get_html('http://www.example.com/');
// Find all links 
foreach($html->find('a') as $element) {
    $uri = $element->href;
    //Now how to check if $uri belongs to same domain?
}

1 个答案:

答案 0 :(得分:0)

假设您的所有网址都是 http://example.com/hello.php 中的绝对*网址。然后,您将使用parse_url获取所有网址的主机。

php > $url = "http://example.com/hello.php";
php > print parse_url($url, PHP_URL_HOST);
example.com

您现在只需要比较您当前正在抓取的网站主机的链接主机。如果比较主机是不够的,则必须从主机中提取域。这并不容易,因为没有规则。 https://www.publicsuffix.org/具有此任务所需的所有信息。这包括一个PHP URL解析器库。

*(非绝对的网址当然位于同一个域中,因此您不需要它们来做出决定。)