Как научить бота разбирать ссылки.

Cramac

Новичок
Как научить бота разбирать ссылки.

Всем привет.
подскажите в таком вопросе.
У меня есть бот, он ходит по сайту и смотрит содержимое, потом переходит по ссылкам.
Так вот бот может спокойно ходить в пределах корня домена или папки. А вот войдя в паку он из нее не может выйти.
Вот пример:
Может сделать так:
domain.ru -> domain.ru/page.php -> domain.ru/page2.php -> domain.ru/link/page.php
но если на странице domain.ru/link/page.php
попадется ссылка выше на уровень, бот этого не поймет.

Переход делаю так:
PHP:
$fp = fsockopen($host,80, &$errno, &$errstr);
if(!$fp) { echo "<br>\n"; }
else
{
 fputs($fp,"GET $page HTTP/1.0\n\n");
 while(!feof($fp)) { $page.=fgets($fp,128); }
 fclose($fp); 
}
пока понимает ссылки вида:
<a href=page.php>page</a>
и
<a href=link/page.php>page</a>

Но хотелось бы сделать универсального чтоб понимал и ссылки вида:
<a href=http://www.domain.ru/page.php>page</a>
 

bgm

&nbsp;
Как-то вопрос сформулирован не очень: непонятно как разбирается страница на ссылки и как делается обход. Вообще, по смыслу задачи, - здесь или классическая рекурсия, или по-уровневый проход дерева.

Так что - в чём вопрос-то? :)
 

Кром

Новичок
Потрясающий подход к проблеме! - "бот этого не поймет."
А сам то ты понимаешь, что происходит, когда бот ходит по ссылкам?
Если для бота представляет такую гигантскую пробему создать из относительного пути абсолютный, я могу посоветовать купить боту книжку по html и почитать хотя бы первые пару глав.
 

Cramac

Новичок
Автор оригинала: bgm
Как-то вопрос сформулирован не очень: непонятно как разбирается страница на ссылки и как делается обход. Вообще, по смыслу задачи, - здесь или классическая рекурсия, или по-уровневый проход дерева.

Так что - в чём вопрос-то? :)
Вот так он выбирает ссылки:
preg_match_all("/<[Aa][ \r\n\t]{1}[^>]*[Hh][Rr][Ee][Ff][^=]*=[ '\"\n\r\t]*([^ \"'>\r\n\t#]+)[^>]*>/",$page,$url);
 

bgm

&nbsp;
Ну выбрал он таким страшенным регом ссылки.
Что дальше твой бот делает с ними?
 

Cramac

Новичок
Дальше он должен перейти по одной из ссылок.

П.С. А как можно по другому выбрать ссылки?
 

Kelkos

Сам себе программер
Cramac
Хм.. мне кажется, что у тебя проблема в другом: правильный разбор ссылок и составления из них правильных ссылок типа http://my_site.ru/page.php
Если тебе нужен готовый кусок кода, пиши в почту [email protected]
Тамже я могу дать тебе и кусок кода, выдёргивающий все ссылки. да и вообще могу помочь с алгоритмом для такого бота.
 
Сверху