1

シンプルな HTML DOM は基本的に、ページに追加する php であり、簡単な Web スクレイピングを行うことができます。ほとんどの場合は問題ありませんが、私はコーダーがあまり得意ではないため、マニュアルを理解できません。これに関する簡単なヘルプがあるサイト/ガイドはありますか? (php.net のものは、現時点では少し複雑すぎます) この種の質問をするのに適した場所はありますか?

そのサイトは次のとおりです。http://simplehtmldom.sourceforge.net/manual.htm

のような特定のクラスを持つものはスクレイピングできますが<tr class="group">、その間のものはスクレイピングできません。たとえば..これは私が現在使用しているものです...

$url = 'http://www.test.com';
$html = file_get_html($url);
foreach($html->find('tr[class=group]') as $result)
  {
    $first = $result->find('td[class=category1]',0);
    $second = $result->find('td[class=category2]',0);
    echo $first.$second;
  }
}

しかし、これが私がスクレイピングしようとしている種類のコードです。

<table>
  <tr class="Group">
    <td>
      <dl class="Summary">
        <dt>Heading 1</dt>
          <dd><a href="#123" class="ViewProfile">Cat</a></dd>
          <dd><a href="#032" class="ViewProfile">Bacon</a></dd>
        <dt>Heading 2</dt>
          <dd><a href="#143" class="ViewProfile">Narwhal</a></dd>
          <dd><a href="#642" class="ViewProfile">Ice Soap</a></dd>
      </dl>
    </td>
  </tr>
</table>

それぞれの内容を抽出<dt>して変数に入れようとしています。次に、それぞれのコンテンツを抽出<dd>して変数に入れようとしていますが、何も試しませんでした。これが私が見つけた最高のものですが、2番目の見出しに行くのではなく、最初の見出しだけが繰り返し返されます。

foreach($html->find('tr[class=Summary]') as $result2)
  {
    echo $result2->find('dt',0)->innertext;
  }

助けてくれる人に感謝します。これが明確でない場合、または長すぎて申し訳ありません。理想的には、私はこれらの DOM コマンドをもっと理解できるようになりたいと思っています。なぜなら、ここで誰かがそれを行うのではなく、自分でこれを理解したいからです (しかし、私はどちらかを感謝します)。

TL;DR:マニュアル (上記の URL) に記載されているコマンドの使用方法を理解しようとしています。「マニュアル」は簡単ではありません。このようなことをどのように学びますか?

4

1 に答える 1

3

最初の$result2->find('dt',0)element を返すと思います。それを省略すると、代わりに配列(またはノードリスト)0を取得できるはずです。このようなもの:

foreach($html->find('tr[class=Summary]') as $result2)
{
    foreach ($result2->find('dt') as $node)
    {
       echo $node->innertext;
    }
}

ドキュメントには tr が 1 つしかないため、厳密には外側の for ループは必要ありません。ドキュメント内のそれぞれを検索するためにそのままにしておくこともできますがdt、このようなツールの場合、柔軟で厳密であることは良いことだと思います。そのため、複数の行に備えることができますが、誤っdtてどこからでも s を解析しないでください。ドキュメント。

于 2012-10-28T08:18:07.713 に答える