2009-05-07 1 views
3

Я пытаюсь вытащить точный стол во время «царапины в Интернете». Использовал cURL, чтобы вытащить страницу в $ html, что преуспевает.Почему PHP XPath не находит элементы таблицы, хотя Firefox показывает, что они существуют?

Используется Firebug для получения точной XPATH для таблицы.

код следующим образом:

$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 Checker и могу видеть нужные мне данные. Но использование этого в моем PHP xpath-> оценке никогда не возвращает данные. – 2009-05-07 20:46:42

+0

не допускается внутри

непосредственно - должно быть //. Это подразумевается, если не указано напрямую. HTML такой странный: теги начала и конца могут быть необязательными! – Greg

+0

Если элементы tbody не существуют в исходном файле, то они не должны быть в вашем запросе PHP xpath. –

2

Просто удалите "/ tbody". С помощью XPath вы получили от светлячок:

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

создать это:

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

Алоэ

Смежные вопросы