Goutte извлекает данные из каждого узла

привет, я хочу извлечь данные из каждого узла, но я не знаю, как это сделать, и очень ценю, если кто-то даст мне какое-то руководство

<table>
    <tr>
        <td>item1</td>
        <td>item2</td>
    </tr>
    <tr>
        <td>item3</td>
        <td>item4</td>
    </tr>
</table>

и вот мой php-код:

$client = new Client();
    $crawler = $client->request('GET', 'https://www.socom');

    $crawler->filter('.tr')->each(function ($node) {
        print $node->filter('.td')->text()."\n";
    });

person FarbodKain    schedule 06.05.2017    source источник


Ответы (1)


Вы правы, просто вы имеете в виду свои html-теги, которые имеют класс tr, и, как я видел в вашем html, у вас его нет, поэтому у вас нет «успеха».

Проверьте это, вы можете получить доступ к каждому из ваших элементов tr и получить текст внутри таким образом:

$crawler->filter('tr')->each(function($node) {
  print_r($node->text());
});

Обратите внимание, что вывод представляет собой node, поэтому вы не можете использовать echo, и здесь я использую только tr, чтобы сделать ссылку на элемент.

А еще можно сделать так, вот это больше похоже на то, что вы хотели получить:

$crawler->filter('tr')->each(function($node) {
  $node->filter('td')->each(function($nested_node) {
    echo $nested_node->text() . "\n";
  });
});

Это означает, что все tr поверх каждого tr получают свои td, а затем поверх этих td элементов получают текст внутри.

И все, это код.

<?php

require __DIR__ . '/vendor/autoload.php';

use Goutte\Client;

$client = new Client();

$crawler = $client->request('GET', 'your_url');

$crawler->filter('tr')->each(function($node) {
  print_r($node->text());
});

$crawler->filter('tr')->each(function($node) {
  $node->filter('td')->each(function($nested_node) {
    echo $nested_node->text() . "\n";
  });
});

Надеюсь, поможет.

person Sebastian Palma    schedule 06.05.2017