[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Функция выборки внутренних ссылок со страницы
sx000
//Функция выпарсивания урлов в массив
$g_domen = parse_url($domain); //достаю хост из строки
function url_pars ($page,$url) {
$href_arr = array();
$html = str_get_html($page);
foreach($html->find('a') as $search_ahref){
$href = $search_ahref->href;
if (!eregi('#',$href) or !eregi('mailto:',$href) or eregi($g_domen['host'],$href)){
$href_arr[] = $href;
}
}
}

Вот я симпл домом тащу все ссылки с страницы которую передаю в функцию, задача стоит взять все только внутренние ссылки и не брать внешних. Я отсекаю хлам
 if (!eregi('#',$href) or !eregi('mailto:',$href) or eregi($g_domen['host'],$href))

И вот не задача есть ссылки вида:

<a href="subfolder/page2.htm"> Для перехода на page2 щелкни здесь! </a>
<a
href="../page1.htm"> Для перехода на page1 щелкни здесь! </a>
<a
href="page2.htm"> Для перехода на page2 щелкни здесь! </a>

Ну понятно если ссылка сразу содержит $g_domen['host'] это я забираю в массив, а если вот такие хитрые конструкции я не понимаю как создать полную ссылку из относительных что я выше дал, да надо подставить хост ... но как быть с ../page1.htm или еще больше там может быть точек же. Путаница. Подскажите плз



Спустя 5 часов, 15 минут, 20 секунд (22.08.2012 - 06:03) Игорь_Vasinsky написал(а):
Цитата
if (!eregi('#',$href) or !eregi('mailto:',$href) or eregi($g_domen['host'],$href))

eregi - устаревшая, используй preg_match()

тебе нужно отсекать все ссылки с http|https|ftp|mailto, при этом смотреть чтоб ссылки с протоколами http (https) - не были с твоим доменом

Спустя 10 часов, 46 минут, 50 секунд (22.08.2012 - 16:49) sx000 написал(а):
спасибо за совет а как быть все таки с сылками вот этими что я описал

Спустя 37 минут, 1 секунда (22.08.2012 - 17:26) vagrand написал(а):
sx000

если в ссылке не указан протокол, то она априори внутренняя.

Спустя 3 часа, 40 минут, 49 секунд (22.08.2012 - 21:07) sx000 написал(а):
так а кто спорит вопрос то не в этом!

Спустя 22 минуты (22.08.2012 - 21:29) Игорь_Vasinsky написал(а):
<?php
header("Content-Type: text/html; charset=utf-8");

$mydomen = 'hdkinozavr.ru';

$page = file_get_contents('http://hdkinozavr.ru');

preg_match_all("#<a.*href\s*\=\s*\"([^\"].*)\".*>(.*)</a>#iusU", $page, $links);

#Все ссылки
#echo '<pre>' . print_r($links[1], 1) . '</pre>';


foreach($links[1] as $link=>$anchor)
{
//Сразу отсеем ссылки без протоколов, они местные =) (протоколов больше ест-но)
if(substr_count($anchor, 'http://') == 0 AND substr_count($anchor, 'https://') == 0 AND substr_count($anchor, 'ftp://') == 0)
echo $anchor.'<br />';
//Ссылки с моим доменом
elseif(substr_count($anchor, $mydomen))
echo $anchor.'<br />';
//Всё остальное
else
echo $anchor.'<br />';
}
?>

Спустя 15 часов, 36 минут, 8 секунд (23.08.2012 - 13:05) sx000 написал(а):
ну у меня тоже самое только через симпл дом, проотколов тока надо добавить, я видимо вопрос не верно сформулировал.
Местные ссылки без указания протокола, мне надо их тоже собирать же они внутрение и по ним тоже ходить. Так вот если выгрести местную ссылку
<a href="subfolder/page2.htm"> Для перехода на page2 щелкни здесь! </a>
тут понятно подставим просто домен и все.
<a href="../page1.htm"> Для перехода на page1 щелкни здесь! </a>
а как поступать в таких случаях, ведь может быть и три точки ... что сюда подставлять?

Спустя 50 минут, 36 секунд (23.08.2012 - 13:56) Игорь_Vasinsky написал(а):
ОоО.. ты типа паука пишешь???

тут нужно парсить url - а если у тя ЧПУ - то алгоритм усложнаяется

Спустя 34 минуты, 28 секунд (23.08.2012 - 14:30) sx000 написал(а):
угу урлы надо собирать с ресурса внутренние все
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.