【问题标题】:Simple html dom parser table简单的html dom解析表
【发布时间】:2021-07-04 13:50:56
【问题描述】:

我使用Simple HTML Dom 将数据解析为我自己的php 脚本,我需要获取td 中的文本,表中只有一个td。 Website 从我尝试解析 table->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


    【解决方案1】:

    您正在第一个 &lt;table&gt; 中寻找第二个 &lt;td&gt;

    因此没有必要对所有表进行迭代 (foreach),并且迭代第一个 &lt;td&gt; 甚至是错误的(如果您检查错误日志,它会显示已经显示)。

    让我们做 first 表,second 表数据,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 输出。
    • 结束?&gt; php 标记在文件末尾不是必需的,在它导致问题之前将其保留。
    • 最后但并非最不重要的一点,如果您允许我的话:simplehtmldom 真的很老了。您可能会考虑在某个时候使用来自 dom PHP 扩展的 DOMDocument 类,并将其与其他 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>';
    

    【讨论】:

    • 感谢鳕鱼和建议,你帮了我很多。在我的空闲时间我会学习 html 以外的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多