Ранее в нашем блоге уже был пост о том, как извлечь все ссылки из веб-страницы, отбор ссылок в том примере производился с помощью регулярных выражений. Сейчас мы рассмотрим другой пример, как можно получить ссылки со страницы посредством использования класса DOMDocument.
Класс DOMDocument находится в расширении DOM для PHP, начиная с версии PHP5. Класс представляет все содержимое HTML или XML документа, говоря простым языком, служит в качестве корня дерева документа.
Давайте приступим к примеру. Рассмотрим функцию, которая наглядно демонстрирует простоту и удобство использования класса DOMDocument:
// функция получает все ссылки из документа
// $link - ссылка на документ
function get_links($link)
{
// сюда будем помещать результат
$ret = array();
// создаем новый объект класса
$dom = new domDocument;
// получаем контент
@$dom->loadHTML(file_get_contents($link));
// убираем пробелы
$dom->preserveWhiteSpace = false;
// извлекаем все теги ссылок
$links = $dom->getElementsByTagName('a');
// получаем значение артибута href для всех ссылок
foreach ($links as $tag)
{
$ret[$tag->getAttribute('href')] = $tag->childNodes->item(0)->nodeValue;
}
return $ret;
}
После того как была описана функция, рассмотрим как можно обращаться к ней:
// ссылка на страницу, где будем собирать ссылки
$link = "http://www.php.net";
// обращаемся к нашей функции
$urls = get_links($link);
// проверяем результат
if(sizeof($urls) > 0)
{
// выводим в цикле
foreach($urls as $key=>$value)
{
echo $key . ' - '. $value . '<br >';
}
}
else
{
echo "Не удалось получить ссылки на странице $link";
}