2015-03-25 2 views
1

Я использую Symfony, Goutte и DOMCrawler для очистки страницы. К сожалению, на этой странице много старомодных таблиц данных, а также нет идентификаторов или классов или идентифицирующих факторов. Поэтому я пытаюсь найти таблицу, проанализировав исходный код, который я получил от запроса, но я не могу получить доступ к какой-либо информации.DOMCrawler не правильно загружает данные для разбора

Я думаю, что когда я пытаюсь отфильтровать его, он фильтрует только первый узел, и это не то место, где мне нужны мои данные, поэтому он ничего не возвращает.

поэтому у меня есть объект $crawler. И я пытался перебрать следующем, чтобы получить то, что я хочу:

$title = $crawler->filterXPath('//td[. = "Title"]/following-sibling::td[1]')->each(funtion (Crawler $node, $i) { 
     return $node->text(); 
}); 

Я не уверен, что Crawler $node, я только что получил его от, например, на веб-странице. Возможно, если я смогу получить эту работу, тогда она будет проходить через каждый узел в объекте $crawler и найти то, что я на самом деле ищу.

Вот пример страницы:

<table> 
<tr> 
    <td>Title</td> 
    <td>The Harsh Face of Mother Nature</td> 
    <td>The Harsh Face of Mother Nature</td> 
</tr> 
. 
. 
. 
</table> 

И это только одна таблица, есть много столов и огромный неряшливо беспорядок за пределами этого. Есть идеи?

(Примечание: ранее я смог применить фильтр к объекту $crawler для получения некоторой информации, необходимой мне, затем I serialize() информации и имеет строку, наконец, которая имеет смысл. Но я больше не могу получить строку , ИДК почему)

ответ

1

DomCrawler HTML() функция оленья кожа сваливать весь HTML, как в описании функции:.

http://api.symfony.com/2.6/Symfony/Component/DomCrawler/Crawler.html#method_html

возвращает только первый узел, который он сделал в вашем случае.

Возможно, вы можете использовать http://php.net/manual/en/domdocument.savehtml.php, поскольку DomCrawler - это набор SplObjectStorage.

$html = $crawler->getNode(0)->ownerDocument->saveHTML(); 
0

Если посмотреть исходный код для Crawler::html() вы увидите, что она выполняет следующие действия:

$html = ''; 
foreach ($this->getNode(0)->childNodes as $child) { 
    $html .= $child->ownerDocument->saveHTML($child); 
} 
return $html; 
Смежные вопросы