вопрос о парсерах

I
На сайте с 04.08.2006
Offline
112
699

С ними знаком только поверхносно, поэтому потребую совета.

Как получить массив из всех внутренних ссылок сайта?

Инновационный автомобильный проект. Экономия от 500 - 3000$ при покупке автомобиля (http://autoline24.com.ua) Магазин-блог уникальных полезных скриптов (http://ivashka.org.ua)
[Удален]
#1

Есть такое, если надо, в привате будет что объяснить

I
На сайте с 04.08.2006
Offline
112
#2

Не понимаю зачем в таком простом вопросе ПМ, но уже пишу. Не могу просто регулярку добить.

ivashka добавил 15.02.2008 в 02:07

ivashka:
Не понимаю зачем в таком простом вопросе ПМ, но уже пишу. Не могу просто регулярку добить.

Не могу почему-то писать к тебе в личку. Ответь пожалуйсто тут. Спасибо.

[Удален]
#3

Сорри, был пьян и много флейма оставил, а удалить не могу :(

Эта функция считает количество внешних ссылок на сайте.

$p - текст страницы

$site - урл сайта, на котором эта страница.


//Вспомагательная функция
function crop_text($str)
{
$x1=0;
$x2=0;
$x=0;
if(strlen($str)<4) return '';
$x1=strpos($str,'>');
$x2=strpos($str,'"',2);
$x=($x1<$x2)?$x1:$x2;
$str=substr($str,1,$x-1);
return $str;
}
//Эта функция
function math_links($p,$site)
{
$pr='';
unset($temp);
$outlink=0;
$temp=explode('href=',$p);
$pr.='Ссылок всего: '.(sizeof($temp)-1).'<br />';
//Вырезаем лишний текст - в массиве остаются только ссылки
array_walk($temp,'crop_text');
$site=str_replace('http://','',$site);
$site=str_replace('www.','',$site);
for($i=1;$i<sizeof($temp);$i++)
if((!strpos($temp[$i],$site))&&(strpos($temp[$i],'http')))$outlink++;
return $outlink;
}

Чтобы получить текст страницы используйте curl

AM
На сайте с 12.09.2007
Offline
47
#4

а я примерно так получал ссылки


preg_match_all('#<a.+href="([^"]+)"#U', $text, $links);
if (isset($links[1]))
$links[1] = array_unique($links[1]);

+ в регэксп можно внести поправки на одинарные кавычки..

С уважением, Морозов Андрей, разработчик проекта eTXT.ru (http://www.etxt.ru/?r=morozov), icq 55377667
I
На сайте с 04.08.2006
Offline
112
#5

Огромное спасибо. Задача успешно решена.

если кому интересно, самый простой способ:

preg_match_all('/\<a.+?href="(.*?)".*?\>(.+?)\<\/a\>/', $html, $matches);

$matches[1] - ссылки

$matches[2] - текст ссылки

всем огромное спасибо.

nikitian особое спасибо за функцию подсчета количества ссылок)

ivashka добавил 16.02.2008 в 00:55

Еще один вопросик. Я получаю массив со всеми ссылками, но как мне различить внутренние и внешние? Тоесть что бы в одном массиве остались внутренние а в другом - внешние. Заранее благодарен.

mfl
На сайте с 16.10.2006
Offline
134
mfl
#6

При разборе массива:

if (substr_count($matches[1][$key], "://")) echo $matches[1][$key]." - внешняя ссылка";

else echo $matches[1][$key]." - внутренняя ссылка";

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий