avtor.fox пишет:3.3. Проверяете ссылки на уникальность.
а также не забываем проверять внешняя это ссылка или внутренняя. Внешние - пропускаем.
(Добавление)
писал однажды простой парсер сайта.
парсит страницы и складывает содержимое в папку.
на вход рекурсивной функции подается стартовый адрес, и он обходит все связанные по ссылкам.
Оставлю вам как пример.
Если убрать функциональность по сохранению контента и вместо этого сохранять найденные ссылки в массив, получится примерно то, что вам надо.
Спойлер (Отобразить)
PHP:
скопировать код в буфер обмена
header ('Content-type: text/plain'); define('DS', DIRECTORY_SEPARATOR);
$level = 0;
Grab('http://jquery.page2page.ru/index.php5/', 'Заглавная_страница');
function Grab($url, $page){
global $scanned, $level;
$level++;
$file = iconv("UTF-8","WINDOWS-1251",$file); echo date('H-i-s') . ' :: '.$level . ' :: NEW :: Страница: '. $page . PHP_EOL
; } else {
echo date('H-i-s') . ' :: '.$level . ' :: exists :: Страница: '. $page . PHP_EOL
; // $content = str_replace('/index.php5', '/content', $content);
$content = preg_replace('/<div id="column-one">.+\/div>/s','',$content); $content = preg_replace('/<script.+\/script>/Us','',$content); $content = preg_replace('/<noscript.+\/noscript>/Us','',$content); // $content = preg_replace('/style=["|\'].+["|\']/Us','',$content);
// $content = preg_replace('/id=["|\'].+["|\']/Us','',$content);
// $content = preg_replace('/class=["|\'].+["|\']/Us','',$content);
$content = str_replace('<div id="globalWrapper">', '', $content); // $content = str_replace(' >', '>', $content);
// die($content);
}
foreach ($matches[1] as $m) {
}
// print_r($links);
foreach ($links as $link) {
if ($level < MAX_LEVEL) {
Grab($url, $link);
}
}
$level--;
тухлыми помидорами не кидаться - скрипт писаля для разовой задачи, с которой он прекрасно справился.