Очистка сайта с помощью DOM и XML в Stack Overflow

Я пытаюсь получить список ссылок с веб-страницы с помощью PHP. Вот что я попробовал:

$webpage = file_get_contents('http://cl1.php.net/manual/en/function.call-user-func-array.php');

$dom = new DOMDocument();
$dom->loadHTML($webpage);

$xpath = new DOMXPath($dom);
$links = $xpath->query('aside/ul/li/ul/li/a');//returns nothing

foreach ($links as $link) {
echo $link->getAttribute('href');
}

Код работает до тех пор, пока не должен выполнить запрос, когда он возвращает пустой объект.

Я также попытался это, чтобы решить вышеупомянутую проблему:

$dom->getElementsByTagName('aside')->childNodes->item(0)->childNodes->item(0)->childNodes->item(1)->childNodes->item(0)->childNodes->item(0)->childNodes;

Я знаю, что этот последний код не возвращает все элементы, но, несмотря на это, он не работает.

РЕДАКТИРОВАТЬ:

Это часть HTML:

<aside class='layout-menu'>

<ul class='parent-menu-list'>
<li>
<a href="ref.funchand.php">Function handling Functions</a>

<ul class='child-menu-list'><li class="current">
<a href="function.call-user-func-array.php" title="call_&#8203;user_&#8203;func_&#8203;array">call_&#8203;user_&#8203;func_&#8203;array</a>
</li>

0

Решение

Я не вижу, как ваш запрос будет соответствовать. Вы используете относительный запрос ко всему документу, поэтому по сути вы будете делать относительный запрос из корня документа.

Попробуйте либо указать свой запрос от корневого узла, например:

// instantiate DOMXPath
$xpath = new DOMXPath($dom);
// use full path hierarchy in query
$links = $xpath->query('/html/body/.../aside/ul/li/ul/li/a');

Или пройти aside контекст узла в xpath для использования с относительным запросом.

// get DOMNode object for aside element
$aside_tag = $dom->getElementsByTagName('aside')->item(0);
// instantiate DOMXPath
$xpath = new DOMXPath($dom);
// pass DOMNode context to DOMXPath::query()
$links = $xpath->query('ul/li/ul/li/a', $aside_tag);
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector