我目前正在尝试找出一种编写脚本(最好是PHP)的方法,该脚本可以浏览网站并创建站点地图。除了传统的标准页面列表之外,我还希望脚本能够跟踪哪些页面链接到其他页面。
示例页面
A
B
C
D
我希望输出能给我以下内容。
页面名称: A
链接到页面A的页面:
页面名称: B
链接到第B页的页面:
等...
我遇到过多个标准的站点地图脚本,但没有真正实现我正在寻找的东西。
修改 似乎我没有提供足够的信息。抱歉我的不清楚。这是我目前的代码。我已经使用simple_html_dom.php来处理解析和搜索html的任务。
<?php
include("simple_html_dom.php");
url = 'page_url';
$html = new simple_html_dom();
$html->load_file($url);
$linkmap = array();
foreach($html->find('a') as $link):
if(contains("cms/education",$link)):
if(!in_array($link, $linkmap)):
$linkmap[$link->href] = array();
endif;
endif;
endforeach;
?>
注意:我的小foreach循环只根据网址中的特定子字符串进行过滤。
所以,我有必要的第一级页面。我陷入困境的是创建一个无法无限期运行的循环,同时跟踪您已经访问过的页面。
答案 0 :(得分:0)
基本上,您需要两个阵列来控制流量。第一个将跟踪您需要查看的页面,第二个将跟踪您已经查看过的页面。然后,您只需在每个页面上运行现有代码,直到没有剩下的代码:
<?php
include("simple_html_dom.php");
$urlsToCheck = array();
$urlsToCheck[] = 'page_url';
$urlsChecked = array();
while(count($urlsToCheck) > 0)
{
$url = array_pop($urlsToCheck);
if (!in_array($url, $urlsChecked)
{
$urlsChecked[] = $url;
$html = new simple_html_dom();
$html->load_file($url);
$linkmap = array();
foreach($html->find('a') as $link):
if(contains("cms/education",$link)):
if((!in_array($link, $urlsToCheck)) && (!in_array($link,$urlsChecked)))
$urlsToCheck[] = $link;
if(!in_array($link, $linkmap)):
$linkmap[$link->href] = array();
endif;
endif;
endforeach;
}
}
?>