【问题标题】:Goutte - Get table columnGoutte - 获取表格列
【发布时间】:2017-03-21 03:29:01
【问题描述】:

我怎样才能只得到一列而不是整个表?

<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 />';
        });

它总是返回整个表。 还尝试了 tr[1] 等 stn。

有人可以帮忙吗?

谢谢

【问题讨论】:

    标签: php goutte


    【解决方案1】:

    我找到了解决办法:

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

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

    【讨论】:

      【解决方案2】:

      您可以使用 DOMDocument 从 HTML 中获取数据。

      PHP code demo

      <?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);
      

      【讨论】:

        【解决方案3】:

        试试下面的代码:

        $content  = $crawler->filter( 'table' )->extract( array( '_text' ) );
        

        【讨论】:

          猜你喜欢
          • 2015-05-18
          • 2016-07-22
          • 2022-01-20
          • 2021-01-18
          • 2019-05-31
          • 2018-07-19
          • 2020-04-22
          • 2016-08-27
          • 1970-01-01
          相关资源
          最近更新 更多