Как создать карту сайта с отношениями страниц
В настоящее время я пытаюсь найти способ написать скрипт (предпочтительно PHP), который будет сканировать сайт и создавать карту сайта. В дополнение к традиционному стандартному списку страниц, я бы хотел, чтобы скрипт отслеживал, какие страницы ссылаются на другие страницы.
Примеры страниц
A
B
C
D
Я хотел бы, чтобы результат дал мне что-то вроде следующего.
Название Страницы: A
Страницы, ссылающиеся на страницу О:
- B
- C
- D
Название Страницы: B
Страницы, ссылающиеся на страницу B:
- A
- C
И т. д...
Я наткнулся на несколько стандартных сценариев sitemap, но ничего, что действительно выполняет то, что я ищу.
EDIT Похоже, я дал недостаточно информации. Извините за отсутствие ясности. Вот код, который у меня сейчас есть. Я использовал 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 просто фильтрует на основе определенной подстроки в url.
Итак, у меня есть необходимые страницы первого уровня. Где я застрял, так это в создании цикла, который не будет работать бесконечно, отслеживая страницы, которые вы уже посетили.1 ответ:
В принципе, вам нужно два массива для управления потоком здесь. Первый будет отслеживать страницы, которые вам нужно посмотреть, а второй будет отслеживать страницы, которые вы уже посмотрели. Затем вы просто запускаете существующий код на каждой странице, пока его не останется:
<?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; } } ?>