2009-05-07 7 views
3

私は「ウェブスクレーパー」の間に正確なテーブルを取得しようとしています。 cURLを使用して$ htmlにページをプルします。これは正常終了です。Firefoxが存在することを示すにもかかわらず、PHP XPathがテーブル要素を検索しないのはなぜですか?

正確なXPATHを必要なテーブルに取得するために使用されるFirebug。

コードは以下:

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

$xpath = new DOMXpath($dom); 
$summary = $xpath->evaluate('/html/body/table[5]/tbody/tr/td[3]/table/tbody/tr[8]/td/table'); 
echo "Summary Length: " . $summary->length; 

実行、$ summary->の長さは常にゼロです。そのテーブルノードは引き出されません。

アイデア?

+0

[なぜ私のXPathクエリ(Hをこするんが重複する可能性TMLテーブル)は、Firebugでしか動作しますが、開発しているアプリケーションでは動作しませんか?](http://stackoverflow.com/questions/18241029/why-does-my-xpath-query-scraping-html-tables-only-work -in-firebug-but-not-the) –

答えて

4

Firefoxは、「仮想」tbody要素を持っていないテーブルに挿入する可能性があります。それらの要素は元のファイルに存在しますか?

+0

いいえ、そうではありません。しかし、私はそれらをfirefoxで見ます。 私はXPathチェッカーも使用しており、必要なデータを見ることができます。しかし、私のPHP xpath-> evaluateでそれを使用するとデータが返されません。 –

+0

は、の内部では許可されません。//が必要です。直接指定されていない場合は暗黙のことです。 HTMLはそれほど奇妙です...開始タグと終了タグはど​​ちらもオプションです! – Greg

+0

tbody要素が元のファイルに存在しない場合は、PHPのxpathクエリに含まれていてはいけません。 –

2

"/ tbody"を削除するだけです。 XPathのから、あなたは、Firefoxからもらっ:

.//*[@id='data']/tbody/tr[1]/td[2]/span

はこれを作成します。

.//*[@id='data']/tr[1]/td[2]/span

アロエ

関連する問題