8

PHP Simple HTML DOM Parser を使用して Web ショップの一部のデータをスクレイピングしています (PHP5.3.0 で XAMPP 1.7.2 も実行しています) <tbody>。タグで問題が発生しています。テーブルの構造は基本的に次のとおりです (詳細はそれほど重要ではありません)。

<table>
  <thead>
    <!--text here-->
  </thead>
  <tbody>
    <!--text here-->
  </tbody>
</table>

今、私は<tbody>コードを使用してセクションに到達しようとしています:

$element = $html->find('tbody',0)->innertext;

エラーはスローされません。エコーしようとしても何も出力されません。私は他の要素でコードをテストしまし<thead>た。それらはすべて正しいセクションを提供します。外文同上。しかし、それはすべて失敗します。<table><span class="price"><tbody>

今、私はパーサーにざっと目を通しましたが、それを理解できるかどうかはわかりません. 言及されていないことに気付きました<thead>が、うまく機能します。肩をすくめる

子ナビゲーションを試してみることもできると思いますが、それも不具合があるようです。実行してみました:

$el = $html->find('table',0);
$el2 = $el->children(2);
echo $el2->outertext;

そしてサイコロはありません。と 2 を 1 に置き換えてみましchildrenたがfirst_child、まだダイスはありません。面白いですが、->findの代わりに試してみるとchildren、完全に機能します。

全体の回避策を見つけることができると確信していますが、この動作はここに投稿するのに十分奇妙に思えます。私の好奇心旺盛な心は、得られるすべての助けに満足しています。

4

4 に答える 4

31

simple_html_dom.php ファイルでコメントするか、行番号 396 を削除します

// if ($m[1]==='tbody') continue;
于 2010-10-31T05:53:51.063 に答える
3

この問題に関するバグ レポートは、 http ://sourceforge.net/p/simplehtmldom/bugs/79/ にあります。

この記事を書いている時点ではまだ開いています。ソース コードを変更したくない場合は、別の修正方法があります<tr>

<?php
  // The *BROKEN* way to find the <tr>'s 
  // below the <tbody> below the <table id="foo">
  foreach($dom->find('tbl#foo tbody tr') as $tr) {
    /* you will get nothing */
  }

代わりに、次のようにall を繰り返しながら、親タグ名を選択的にチェックできます。<tr>

<?php
  // A workaround to find the <tr>'s 
  // below the <tbody> below the <table id="foo">
  foreach($dom->find('tbl#foo tr') as $tr) { // note the lack of tbody selector
    /* you will get all trs, but let's only work with ones with the parent
       of a tbody! */
    if($tr->parent->tag == 'tbody') { // our workaround
      /* this part will work as you would expect the above broken code to work */
    }
  }

<tbody>また、Chrome と FF のインスペクターがとに関するタグ スープを修正するという、私が遭遇した少し関係のない問題にも注意してください<thead>。注意してください -- 実際のソースだけを見てください -- 説明のつかない問題に遭遇した場合は、DOM インスペクタから離れてください。

于 2014-05-23T20:16:19.080 に答える
1

tbodyjavascriptの実行から来ていることを確認してください。スパンタグでも同じ問題に直面していました。後で私は、HTMLコードがjquery /その他のjavascriptの実行を介してページに入っている場合、その場合simple_html_domは単に失敗することを発見しました。

于 2010-08-29T08:49:00.040 に答える
1

tbody が本当にそこにあることを確認してください。多くのブラウザーは、応答に存在しない場合でも、検査パネルのテーブルに tbody を追加します。

于 2012-09-24T01:19:22.403 に答える