Goutte — Получить столбец таблицы

как я могу получить только один столбец, а не всю таблицу?

<table cellspacing="0" cellpadding="0" align="Center" rules="all" border="1">
    <tbody>
    <tr>
        <td>Entity Name</td>
        <td>NV Business ID</td>
        <td>Status</td>
        <td>Type</td>
    </tr>
    <tr>
        <td><a href="">GOOGLE</a></td>
        <td><a href=""></a></td>
        <td><a href="">Expired</a></td>
        <td><a href="">Reserved Name</a></td>
    </tr>
    <tr>
        <td><a href="">GOOGLE INC.</a></td>
        <td><a href="">NV20161275322</a></td>
        <td><a href="">Active</a></td>
        <td><a href="">Foreign Corporation</a>
        </td>
    </tr>
    </tbody>
</table>

Вот моя попытка:

        $client = new Client();
        $crawler = $client->request('GET', 'url');
        $form = $crawler->selectButton('Search')->form();
        $crawler = $client->submit($form, array(
            ...
        ));
        $crawler->filter('table tr')->each(function ($node) {
            print $node->text()."\n \n";
//            print $node->filter('td')->text() . '<br />';
        });

Он всегда возвращает всю таблицу. Также пробовал stn как tr[1] и т.д..

Может кто-нибудь помочь, пожалуйста?

Спасибо


person Community    schedule 21.03.2017    source источник


Ответы (3)


Я нашел решение:

$node->filter('td')->eq(2)->text();

2 означает третий столбец, потому что это [0,1,2,...]

person Community    schedule 21.03.2017

Вы можете использовать DOMDocument для получения данных из HTML.

демонстрация кода PHP

<?php
ini_set("display_errors", 1);
$html = '<table cellspacing="0" cellpadding="0" align="Center" rules="all" border="1">
    <tbody>
    <tr>
        <td>Entity Name</td>
        <td>NV Business ID</td>
        <td>Status</td>
        <td>Type</td>
    </tr>
    <tr>
        <td><a href="">GOOGLE</a></td>
        <td><a href=""></a></td>
        <td><a href="">Expired</a></td>
        <td><a href="">Reserved Name</a></td>
    </tr>
    <tr>
        <td><a href="">GOOGLE INC.</a></td>
        <td><a href="">NV20161275322</a></td>
        <td><a href="">Active</a></td>
        <td><a href="">Foreign Corporation</a>
        </td>
    </tr>
    </tbody>
</table>';
$result=array();
$object= new DOMDocument();
$object->loadHTML($html);
$requiredColumn=3;
$requiredColumn--;
foreach($object->getElementsByTagName("tr") as $value)
{
    $nodelistObject=$value->getElementsByTagName("td");
    $columnCounter=0;
    foreach($nodelistObject as $tdNode)
    {
        if($columnCounter==$requiredColumn)
        {
            if($tdNode->getElementsByTagName("a")->length==0)
            {
                $result[]=$tdNode->textContent;
            }
            foreach($tdNode->getElementsByTagName("a") as $aElement)
            {
                $result[]=$aElement->textContent;
            }
        }
        $columnCounter++;
    }
}
print_r($result);
person Sahil Gulati    schedule 21.03.2017

Попробуйте следующий код:

$content  = $crawler->filter( 'table' )->extract( array( '_text' ) );
person Mostafa Soufi    schedule 15.11.2017