Получение ссылок на изображения между тегом привязки через парсер php dom

Я пытаюсь прочитать все ссылки с заданным URL-адресом.

вот код, который я использую:

$dom = new DomDocument();
@$dom->loadHTMLFile($url);
$urls = $dom->getElementsByTagName('a');

foreach ($urls as $url) {
        echo $url->innertext ." => ".$url->getAttribute('href');

Скрипт, дающий все ссылки по заданному URL.

Но проблема в том, что я не могу получить ссылки на изображения (изображение внутри тега привязки)

Сначала я попробовал с

$url->nodeValue

Но он давал якорный текст, имеющий только текстовые значения.

Я хочу читать как изображения, так и текстовые ссылки. Я хочу вывести в формате ниже.

Вход :

<a href="link1.php">first link</a>
<a href="link2.php"> <img src="imageone.jpg"></a>

Текущий выход:

first link => link1.php
=>link2.php with warning (Undefined property: DOMElement::$innertext )

Требуемый результат:

first link => link1.php
<img src="imageone.jpg">=>link2.php 

person Community    schedule 12.09.2011    source источник
comment
Какой результат вы получаете? Какой результат вы хотите?   -  person lonesomeday    schedule 12.09.2011
comment
получение только значений href. и для текстового/изображения ч/б тег привязки, выдающий предупреждение Неопределенное свойство: DOMElement::$innertext в /home/url/public_html/crawl2.php   -  person    schedule 12.09.2011
comment
@ Альфред, это не помогает прояснить твой вопрос. Пожалуйста, предоставьте образец разметки и некоторые выходные данные, которые вы хотите извлечь из него. Что касается innerText: в DOMNode или DOMElement такого свойства нет.   -  person Gordon    schedule 12.09.2011
comment
@Гордон: Спасибо. Теперь обновляется с текущим и требуемым выходом. Пожалуйста, смотрите обновленный вопрос   -  person    schedule 12.09.2011
comment
возможный дубликат innerHTML в PHP DomDocument?   -  person Gordon    schedule 12.09.2011


Ответы (1)


innerText не существует в PHP; это нестандартное расширение Javascript для DOM.

Я думаю, что вам нужно, это свойство innerHTML. Нет собственного способа добиться этого. Вы можете использовать методы saveXML или, начиная с PHP 5.3.6, saveHTML для экспорта HTML каждого из дочерних узлов:

function innerHTML($node) {
    $ret = '';
    foreach ($node->childNodes as $node) {
        $ret .= $node->ownerDocument->saveHTML($node);
    }
    return $ret;
}

Обратите внимание, что вам нужно будет использовать saveXML до PHP 5.3.6

Затем вы можете назвать это так:

echo innerHTML($url) ." => ".$url->getAttribute('href');
person lonesomeday    schedule 12.09.2011
comment
Не могли бы вы обновить свой ответ в соответствии с моим кодом. На самом деле я не совсем понимаю. - person ; 12.09.2011
comment
выдает ошибку DOMDocument::saveHTML() ожидает ровно 0 параметров, задан 1. - person ; 12.09.2011
comment
@Alfred См. примечание в моем ответе. Вы явно используете более старую версию PHP. Изменение saveHTML на saveXML должно заставить его работать нормально. - person lonesomeday; 12.09.2011