首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Goutte -获取表列

Goutte -获取表列
EN

Stack Overflow用户
提问于 2017-03-21 11:29:02
回答 3查看 2.1K关注 0票数 1

如何才能只获取一列而不是整个表?

代码语言:javascript
复制
<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>

这是我的尝试:

代码语言:javascript
复制
        $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,如tr1等。

有人能帮帮忙吗?

谢谢

EN

回答 3

Stack Overflow用户

发布于 2017-03-21 11:39:15

我找到了一个解决方案:

代码语言:javascript
复制
$node->filter('td')->eq(2)->text();

2表示第三列,因为它是0,1,2,...

票数 1
EN

Stack Overflow用户

发布于 2017-03-21 11:48:56

你可以使用DOMDocument从超文本标记语言中获取数据。

PHP code demo

代码语言:javascript
复制
<?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);
票数 0
EN

Stack Overflow用户

发布于 2017-11-15 15:19:23

试试下面的代码:

代码语言:javascript
复制
$content  = $crawler->filter( 'table' )->extract( array( '_text' ) );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42917918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档