首页 > 解决方案 > 简单的html dom解析表

问题描述

我使用简单的 HTML Dom将数据解析为我自己的 php 脚本,我需要获取 td 内的文本,表中只有一个 td。我尝试解析表格的网站-> td。具体来说,我需要第一个美元 td。

结果必须是

0.0137 美元

源代码:

<?php
  include('../simple_html_dom.php');
  $html = file_get_html('https://rub.currencyrate.today/'); 
   foreach($html->find('table') as $e){
      foreach($e->find('td',0) as $f){
      echo strip_tags($f->innertext) . '<br>';
     }
   }
?>

此代码显示结果

₽ 1 $ 0.0137 € 0.0115 £ 0.00988 ¥ 0.0884 Ƀ 0.00000040

我已经尝试了几种方法来做到这一点,但我每个人都失败了。有人可以帮帮我吗?

标签: php

解决方案


您正在寻找第<td>一个中的第二个<table>

因此,没有必要对foreach所有表进行迭代 (),并且迭代第一个表<td>甚至是错误的(如果您检查错误日志,它会向您显示这一点)。

让我们做第一个表,第二个表数据,其中的数字find()是从零开始的:

$dollar = $html->find('table', 0)->find('td', 1)->innertext();

对于您的输出,请注意正确编码为 HTML,strip_tags在那里没有多大用处,您只需要正确编码的 HTML 字符htmlspecialcharsstrip_tags甚至不能):

echo htmlspecialchars($dollar, ENT_QUOTES | ENT_HTML5), '<br>';

0.0137 美元

一些进一步的说明:

  • 使用 simplehtmldom 2.0-RC2 运行:您使用的版本可能有错误。我无法使用该版本完全重现您的输出(但无论如何遍历都是错误的)
  • 您应该让自己“奢侈”地能够在您的开发框中更突出地看到错误。
  • 注意正确编码 HTML 输出。
  • 结束?>php 标记在文件末尾不是必需的,在它引起问题之前将其保留。
  • 最后但并非最不重要的一点,如果你允许我的话:simplehtmldom 真的很老了。有时您可能会考虑使用DOMDocument来自dom PHP 扩展的类,并将其与其他xml PHP 扩展(simplexml、xmlreader 等)一起使用。

完整示例:

<?php declare(strict_types=1);

include __DIR__ . '/../simple_html_dom.php';

$html = file_get_html('https://rub.currencyrate.today/');

$dollar = $html->find('table', 0)->find('td', 1)->innertext();
echo htmlspecialchars($dollar, ENT_QUOTES | ENT_HTML5), '<br>';

推荐阅读