2009-05-07 1 views
3

Ich versuche, eine genaue Tabelle während eines "Web Scrape" zu ziehen. Verwendet cURL, um Seite in $ html zu ziehen, was gut gelingt.Warum findet PHP XPath keine Tabellenelemente, obwohl Firefox zeigt, dass sie existieren?

Verwendet Firebug, um genaue XPATH zum Tisch benötigt.

-Code folgt:

$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; 

Wenn er ausgeführt wird, $ Zusammenfassung-> Länge immer gleich Null ist. Es zieht diesen Tabellenknoten nicht.

Irgendwelche Ideen?

+0

möglich Duplikat [Warum wird meine XPath-Abfrage (H Schaben TML-Tabellen) funktionieren nur in Firebug, aber nicht in der Anwendung, die ich entwickle?] (Http://stackoverflow.com/questions/18241029/why-does-my-xpath-query-scraping-html-tables-only-work -in-firebug-but-not-the) –

Antwort

4

Firefox kann "virtuelle" tbody Elemente in Tabellen einfügen, die sie nicht haben; Sind diese Elemente in der Originaldatei vorhanden?

+0

Nein, sie nicht. Aber ich sehe sie in Firefox. Ich habe auch XPath Checker verwendet und kann die Daten sehen, die ich brauche. Aber wenn ich es in meinem PHP xpath-> evaluate verwende, gibt es nie Daten zurück. –

+0

ist nicht erlaubt innerhalb

direkt - es muss eine // sein. Es ist impliziert, wenn nicht direkt angegeben. HTML ist so seltsam ... die Start- und End-Tags können beide optional sein! – Greg

+0

Wenn die tbody-Elemente nicht in der Originaldatei vorhanden sind, sollten sie nicht in Ihrer PHP-Xpath-Abfrage enthalten sein. –

2

Entfernen Sie einfach "/ tbody". Von XPath bekam man von firefox:

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

diese erstellen:

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

Aloe

Verwandte Themen