DOMCrawler неправильно выдает данные для анализа

Я использую Symfony, Goutte и 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 объект для какой-то информации мне нужно, то я 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();
1

Другие решения

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

$html = '';
foreach ($this->getNode(0)->childNodes as $child) {
$html .= $child->ownerDocument->saveHTML($child);
}
return $html;
0

По вопросам рекламы [email protected]