Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить все внешние ссылки 
:(
    Опции темы
Exploiter
Дата 23.4.2010, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 27.6.2006

Репутация: нет
Всего: 1



Привет эксперты! Помогите с задачей. есть много сайтов с которых надо собрать все внешние ссылки(ссылки на другие доменные имена ) с анкорами и все это дело записать в файл. как это лучше сделать? 
этот код выводит все ссылки, а мне нужны только внешние
Код

 
$open_url="http://www.shoptop.ru/";
$html=file_get_contents($open_url);
 
preg_match_all('~<a.*?href="([^"]+)".*?>(.*?)</a>~s', $html, $matches);
 print_r($matches);
 


PM MAIL   Вверх
NLspieler
Дата 24.4.2010, 01:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 1
Всего: 19



Нужно отсортировать полученный массив $matches,
используя функцию, stripos, которая позволяет узнать встречается ли заданная подстрока в строке или нет.


Код

<?
$open_url="http://forum.vingrad.ru/forum/act-idx.html";
$html=file_get_contents($open_url);
 
preg_match_all('~<a.*?href="([^"]+)".*?>(.*?)</a>~s', $html, $matches);
$domen_now = explode ('/' , $open_url) ;
$domen_now = $domen_now[2] ; //Достаем часть ссылки после двух // и перед следующей чертой /
$links = array () ; //массив с ссылками после сортировки
foreach ($matches[1] as $value)
{
   /*
    Если ссылка-претендент имеет http (защита от относительных ссылок, javascript приказов и прочей ереси) 
    и не имеет названия текущего домена, то ссылка записывается в массив 
   */
    if ( stripos ($value , $domen_now) === FALSE and stripos ($value , 'http') !== FALSE  )
    {
        $links[] = $value ; //Если подстрока не найдена, то добавить в ссылки.
    }
}
print_r ($links) ;
?>


Но правда тут есть некоторое замечание. Скриптик не отсеивает ссылки на другие поддомены текущего домена.
Т.е. если написать 
$open_url="http://www.yandex.ru/";

то скрипт найдет такие ссылки:

Код

...
    [21] => http://slovari.yandex.ru
    [22] => http://blogs.yandex.ru
    [23] => http://video.yandex.ru
    [24] => http://images.yandex.ru
    [25] => http://auto.yandex.ru
    [26] => http://afisha.yandex.ru
    [27] => http://games.yandex.ru/
    [28] => http://yaca.yandex.ru
    [29] => http://moikrug.ru
    [30] => http://narod.yandex.ru
    [31] => http://cards.yandex.ru
    [32] => http://pogoda.yandex.ru
    [33] => http://mail.yandex.ru
    [34] => http://probki.yandex.ru
...
 

Впрочем, и с этим при необходимости можно бороться.


Это сообщение отредактировал(а) NLspieler - 24.4.2010, 01:28
PM MAIL   Вверх
SickFxck
Дата 24.4.2010, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 16.4.2010

Репутация: 1
Всего: 1



Код

$hostname = strtolower(parse_url($open_url, PHP_URL_HOST));

for($i = 0; $i < count($matches[1]); $i++) {
    if( strtolower(parse_url($matches[1][$i], PHP_URL_HOST)) != $hostname ) {
        var_dump($matches[1][$i]);
    }
}

Либо через array_filter().
PM MAIL   Вверх
Exploiter
Дата 26.4.2010, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 27.6.2006

Репутация: нет
Всего: 1



NLspieler спасибо за код, только как получить еще и анкор вместе со ссылкой?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0402 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.