Ранее в нашем блоге уже был пост о том, как извлечь все ссылки из веб-страницы, отбор ссылок в том примере производился с помощью регулярных выражений. Сейчас мы рассмотрим другой пример, как можно получить ссылки со страницы посредством использования класса 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"; }