php - 简单的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
我已经尝试了几种方法来做到这一点,但我每个人都失败了。有人可以帮帮我吗?
解决方案
您正在寻找第<td>
一个中的第二个<table>
。
因此,没有必要对foreach
所有表进行迭代 (),并且迭代第一个表<td>
甚至是错误的(如果您检查错误日志,它会向您显示这一点)。
让我们做第一个表,第二个表数据,其中的数字find()
是从零开始的:
$dollar = $html->find('table', 0)->find('td', 1)->innertext();
对于您的输出,请注意正确编码为 HTML,strip_tags
在那里没有多大用处,您只需要正确编码的 HTML 字符htmlspecialchars
(strip_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>';
推荐阅读
- c - 如何处理内部数据
- android - GetIntentExtra() Xamarin Android
- python - 在 Python 中枚举函数有哪些替代方法?
- java - 未启用 Spring Boot 控制器端点?
- javascript - JavaScript 跨 URL 通信
- outlook - 自定义属性不会立即保存到 Outlook 桌面 2016 中的 Exchange Server
- android - 多个权限请求顺序
- angular - npm WARN 可选 SKIPPING OPTIONAL 依赖没有被抑制
- javascript - 如何使用 reactjs redux 将新记录附加到已显示的记录
- python - 使用 `tf.image.resize_image_with_crop_or_pad` 来调整 numpy 数组的大小