0

を使用してphpおり、DOMDocument

私がする必要があるのは、タグ内にあるすべてhrefのものを取得することです<a><h2>

のようなリストがあるページで

<h2><a href="blablabla">The title</a></h2>

<a>それぞれに1つしかありません<h2>

私が達成できたのは:

  1. 次の方法でドキュメントをロードします: loadfromhtml (このプロジェクトに必要)
  2. <h2>をドキュメントで取得する
  3. それらを取得します<h2>->nodeValue (caption of url)

ここで私の問題はgetElementsByTagName('a')<h2>ノード(#2)で同じことをしようとするとphpがハングすることです(出力が生成されなくなり、ページの読み込みが停止します)

どこで間違っていますか?ありがとうございます。

4

1 に答える 1

1

私にとってはうまくいきます、例えば

<?php
$doc = new DOMDocument;
$doc->loadhtml(data());

foreach( $doc->getElementsByTagName('h2') as $h2 ) {
    foreach( $h2->getElementsByTagName('a') as $a ) {
        echo $a->getAttribute('href'), ': ', $a->nodeValue, "\n";
    }
}

function data() {
    return <<< eoh
<html>
    <head><title>...</title></head>
    <body>
        <h2><a href="link1">header 1</a></h2>
        <p>yadda yadda</p>
        <h2><a href="link2">header 2</a></h2>
        <p>yadda yadda</p>
        <h2><a href="link3">header 3</a></h2>
        <p>yadda yadda</p>
    </body>
</html>
eoh;
}

しかし、これにはXPathを使用する方が簡単だと思います

<?php
$doc = new DOMDocument;
$doc->loadhtml(data());
$xpath = new DOMXPath($doc);

foreach( $xpath->query('/html/body//h2/a') as $a) {
    echo $a->getAttribute('href'), ": ", $a->nodeValue, "\n";
}

function data() {
    return <<< eoh
<html>
    <head><title>...</title></head>
    <body>
        <h2><a href="link1">header 1</a></h2>
        <p>yadda yadda</p>
        <h2><a href="link2">header 2</a></h2>
        <p>yadda yadda</p>
        <h2><a href="link3">header 3</a></h2>
        <p>yadda yadda</p>
    </body>
</html>
eoh;
}

プリント

link1: header 1
link2: header 2
link3: header 3
于 2012-11-16T14:12:36.673 に答える