Goutte从每个节点提取数据

时间:2017-05-06 16:39:39

标签: 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";
    });

1 个答案:

答案 0 :(得分:1)

你是以正确的方式,只是你指的是你的html标签,其中包含tr类,而且我在你的html中看到你没有,所以,这就是为什么你没有成功&#34;。

选中此项,您可以访问每个tr元素,并以这种方式获取文字:

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

请注意,输出为node,因此您无法使用echo,而我只使用tr来引用该元素。< / p>

而且你也可以做到这一点,这似乎更像是你想要得到的东西:

$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";
  });
});

希望它有所帮助。