【问题标题】:How to use simple html DOM for this table?如何为这个表使用简单的 html DOM?
【发布时间】:2021-06-24 02:36:37
【问题描述】:

大家好,我想创建一个网页并从它的表格中获取数据。 表格代码:

            <tbody>
                <tr class="sh" onclick="ii.ShowShareHolder('21711,IRO1DMOR0004')">
                    <td>person</td>
                    <td><div class="ltr" title="1,100,000">1 M</div></td>
                    <td>2.050</td>
                    <td>0</td>
                    <td><div class=""></div></td>
                </tr>
            
                <tr class="sh" onclick="ii.ShowShareHolder('42123,IRO1DMOR0004')">
                    <td>person</td>
                    <td>953,169</td>
                    <td>1.780</td>
                    <td>0</td>
                    <td><div class=""></div></td>
                </tr>
        </tbody>

这个表有两种大于 1M 和小于 1M 的数据。我想在这个表上获得 1.100.000 td div 数据和 953.169 数据。 我的代码如下。它适用于大于 1M 的数据,但我不知道如何在此表上获取较小的数据。

foreach ($tables as $table) {
    foreach ($table->find('tr') as $row) {
        foreach($row->find('div') as $div)
        {
            if(array_key_exists('title',$div->attr))
            {
                $data[] = str_replace(",","",($div->attr['title']));
            }
        }
    }
}

【问题讨论】:

    标签: php html dom


    【解决方案1】:

    tnx man 我使用你的代码,但它不起作用并且有很多错误。 这是我完整的功能代码。因为服务器是 gzip 编码,我用 curl 读取。

            $url = "http://tsetmc.com/Loader.aspx?Partree=15131T&c=IRO1DMOR0004";
        $curl = curl_get_data($url);
        if(!empty($curl) ){
            $html = str_get_html($curl);
            $xml = simplexml_load_string($html);
            var_dump($xml);
            $data = [];
    
            // For each <tr>
            foreach ($xml->tr as $row) {
    
                // check path `<td><div title="">`
                $result = $row->xpath('td/div[@title]');
                if (! empty($result)) {
                    foreach ($result as $item) {
                        $data[] = str_replace(',', '', $item['title']);
                    }
                }
                else {
                    // if not found, check the 2nd <td>
                    $result = $row->xpath('td[position()=2]');
                    foreach ($result as $item) {
                        $data[] = str_replace(',', '', $item);
                    }
                }
            }
            return $data;
        }
    

    【讨论】:

      【解决方案2】:

      您可以检查&lt;div title=""&gt; 是否存在。如果为 true,则获取该值,否则,获取第二个 &lt;td&gt; 的值。

      这里是一个使用SimpleXML的例子:

      $html = <<<HTML
          <tbody>
              <tr class="sh" onclick="ii.ShowShareHolder('21711,IRO1DMOR0004')">
                  <td>person</td>
                  <td><div class="ltr" title="1,100,000">1 M</div></td>
                  <td>2.050</td>
                  <td>0</td>
                  <td><div class=""></div></td>
              </tr>
              <tr class="sh" onclick="ii.ShowShareHolder('42123,IRO1DMOR0004')">
                  <td>person</td>
                  <td>953,169</td>
                  <td>1.780</td>
                  <td>0</td>
                  <td><div class=""></div></td>
              </tr>
          </tbody>
      HTML;
      
      // parse HTML
      $xml = simplexml_load_string($html);
      
      $data = [];
      
      // For each <tr>
      foreach ($xml->tr as $row) {
      
          // if not found, check the 2nd <td>
          $item = $row->children()[1];
      
          // check if a div with title exists
          if (isset($item->div['title'])) {
              $data[] = str_replace(',', '', $item->div['title']);
          }
          else { // else, take the content
              $data[] = str_replace(',', '', $item);
          }
      }
      
      var_dump($data);
      

      输出:

      array(2) {
        [0]=>
        string(7) "1100000"
        [1]=>
        string(6) "953169"
      }
      

      请参阅live demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多