DOMDocument/Xpath - 如何从表中获取特定行

2023-12-23

这是表 dom 输出:

<table cellspacing="0" cellpadding="0">
    <tbody>
        <tr>
            <th>Валута</th>
            <th>Код</th>
            <th>За единица<br />валута</th>
            <th>Фиксинг на БНБ</th>
            <th>Курс купува</th>
            <th>Курс продава</th>
        </tr>
        <tr>
    <td>Австралийски долар</td>
    <td><em>AUD</em></td>
    <td align="center">1</td>
    <td>1.328960</td>
    <td>1.29340</td>
    <td>1.35670</td>
</tr><tr>
    <td>Британска лира</td>
    <td><em>GBP</em></td>
    <td align="center">1</td>
    <td>2.325380</td>
    <td>2.26920</td>
    <td>2.37970</td>
</tr><tr>
    <td>Евро</td>
    <td><em>EUR</em></td>
    <td align="center">1</td>
    <td>1.955830</td>
    <td>1.94900</td>
    <td>1.95850</td>
</tr><tr>
    <td>Канадски долар</td>
    <td><em>CAD</em></td>
    <td align="center">1</td>
    <td>1.354830</td>
    <td>1.32380</td>
    <td>1.38890</td>
</tr><tr>
    <td>Швейцарски франк</td>
    <td><em>CHF</em></td>
    <td align="center">1</td>
    <td>1.800950</td>
    <td>1.75730</td>
    <td>1.84140</td>
</tr><tr>
    <td>Щатски долар</td>
    <td><em>USD</em></td>
    <td align="center">1</td>
    <td>1.775770</td>
    <td>1.73710</td>
    <td>1.81010</td>
</tr><tr>
    <td>Японска йена</td>
    <td><em>JPY</em></td>
    <td align="center">100</td>
    <td>1.673650</td>
    <td>1.63180</td>
    <td>1.71330</td>
</tr><tr>
    <td>Датска крона</td>
    <td><em>DKK</em></td>
    <td align="center">10</td>
    <td>2.629160</td>
    <td>2.56400</td>
    <td>2.69070</td>
</tr><tr>
    <td>Норвежка крона</td>
    <td><em>NOK</em></td>
    <td align="center">10</td>
    <td>2.084060</td>
    <td>2.03290</td>
    <td>2.13250</td>
</tr><tr>
    <td>Шведска крона</td>
    <td><em>SEK</em></td>
    <td align="center">10</td>
    <td>2.059220</td>
    <td>2.00700</td>
    <td>2.10550</td>
</tr><tr>
    <td>Руска рубла</td>
    <td><em>RUB</em></td>
    <td align="center">100</td>
    <td>2.751570</td>
    <td>2.42030</td>
    <td>3.11320</td>
</tr><tr>
    <td>Нова румънска лея</td>
    <td><em>RON</em></td>
    <td align="center">10</td>
    <td>4.384380</td>
    <td>4.17110</td>
    <td>4.61270</td>
</tr>
    </tbody>
</table>

我有兴趣只获取行<em>GBP</em>和最后一个<td></td>其中的文字。 所有其他我都不需要。

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
    require_once('app/Mage.php');
    Mage::app();

    $url = 'https://www.fibank.bg/bg/valutni-kursove/page/461';


    $curl = curl_init();
        curl_setopt($curl, CURLOPT_COOKIE, "ChosenSite=www; SportsDirect_AnonymousUserCurrency=GBP; language=en-GB");
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_SSLVERSION, 3);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
        curl_setopt($curl, CURLOPT_VERBOSE, true);
        $str = curl_exec($curl);  
        curl_close($curl);  


    libxml_use_internal_errors(true); 
    $doc = new \DOMDocument();
    $doc->loadHTML($str);

    $xpath = new \DOMXpath($doc);
    $value = $xpath->query('//td[em="GBP"]/parent::tr/td[last()]')->item(0)->nodeValue;

    print_r($value);

这段代码完全不起作用。 你能帮我解决一下吗?

提前致谢!


使用 XPathparent轴和last()谓词:

libxml_use_internal_errors(true); 
$doc = new \DOMDocument();
$doc->loadHTML($str);

$xpath = new \DOMXpath($doc);
$value = $xpath->query('//td[em="GBP"]/parent::tr/td[last()]')->item(0)->nodeValue;

print_r($value);  // "2.37970"

演示链接 https://eval.in/611179

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DOMDocument/Xpath - 如何从表中获取特定行 的相关文章

  • Facebook 扩展权限

    更新2 好的 通过更改使其 有点 工作 loginUrl facebook gt getLoginUrl array canvas gt 1 fbconnect gt 0 req perms gt publish stream next g
  • Laravel 注册成功后如何重定向到上一页?

    现在redirectTo被设定为 home 我想知道如何重定向到上一页 我尝试使用 protected redirectTo URL previous 但我得到解析错误 期待 or 解决这个问题的最佳解决方案是什么 我想我需要重写 redi
  • PHP 函数 iconv 字符编码从 iso-8859-1 到 utf-8

    我正在尝试将字符串从 iso 8859 1 转换为 utf 8 但是当我找到这两个字符 和 时 函数返回 一个字符 是一个里面有两个数字的正方形 我该如何解决这个问题 我认为您正在寻找的编码是Windows 代码页 1252 http en
  • 我们可以在 Bash 脚本中使用 PHP 吗?

    我有一个 bash 脚本abcd sh bin sh for i in seq 8 do ssh w i uptime ps elf grep httpd wc l free m mpstat done pid sleep 1 kill 9
  • 如何在PHP中完成http响应并进行进一步处理?

    就我而言 我需要向客户端回显一个标志并发送一封电子邮件 现在客户端需要等待电子邮件发送 但我想把这两个步骤分开 该怎么做呢 你可以看一下异步运行 PHP 任务 https stackoverflow com questions 858883
  • PHP 多个 Ajax 请求:第一个请求阻止第二个请求

    我在一页上有 2 个 ajax 请求 我运行了第一个请求并单独启动了第二个请求 但第二个在第一个运行后停止工作 第一次结束后继续 第一个请求需要很长时间 大约 30 60 秒 此时我需要第二个请求来显示日志第一个请求发生的情况 我尝试使用
  • CakePHP Unfilled 单选按钮在提交时更改为不需要的值

    我有这个表单元素 form gt input ChecklistResponseGovernmentInfo driversLicenseIsOnline array type gt radio empty gt true options
  • 将 jQuery 与 Selenium WebDriver 结合使用 - 如何将 JSON 对象转换为 WebElement?

    我正在使用 Selenium WebDriver 我想执行 jQuery 代码来查找一些元素 我的代码如下 public function uploadGrantDoc script return itemlist grant file u
  • php 包含打印 1

    我编写了以下代码 当我将 include 函数与旨在输出到页面的函数 例如 或 echo include foo php 结合使用时 它会返回包含内容 但在已包含的内容后面带有 1 echo include foo php 应该 inclu
  • PHP、PDO 和 SQLSRV 对一个 INSERT 语句执行多次

    我已经在 MySQL 和 Apache 服务器上使用 PDO 和 PHP 一段时间了 我最近的任务是将企业的旧 Web 应用程序转换为新设置 旧设置是标准 Linux Web 堆栈 Apache PHP MySQL Filezilla 新设
  • Twitch API - 无法使用 PHP 获取身份验证令牌

    stackoverflow 的成员们大家好 我不是一个喜欢寻求帮助的人 但在这种情况下 我认为这是解决我的问题的唯一方法 谷歌并没有给我太大帮助 所以 我的问题 我想使用 Twitch API 获取一些数据 听起来很容易 我希望是这样 下面
  • 唯一的图像哈希值即使 EXIF 信息更新也不会改变

    我正在寻找一种方法来为 python 和 php 中的图像创建唯一的哈希值 我考虑过对原始文件使用 md5 和 因为它们可以快速生成 但是当我更新 EXIF 信息 有时时区关闭 时 它会更改总和 并且哈希也会更改 有没有其他方法可以为这些文
  • 如何将路径添加到 Apache PATH 变量?

    我在 apache2 的 custom conf 文件中设置了以下内容 SetEnv PATH PATH opt local lib mysql5 bin this is a test 但是它不起作用 当我打电话时 hey shell ex
  • PHP + MySQL 队列

    我需要一个充当队列的简单表 我的 MySQL 服务器限制是我不能使用 InnoDB 表 只能使用 MyISAM 客户 工人将同时工作 他们每次都需要接受不同的工作 我的想法是执行以下操作 伪代码 job lt SELECT FROM que
  • 安全地评估简单的数学

    我想知道是否有一种安全的方法来评估数学 例如 2 2 10000 12000 10000 20 2 2 40 20 23 12 无需使用eval 因为输入可以来自任何用户 我需要实现的只是整数的加法和减法 是否有任何已经存在的代码片段 或者
  • MVC 框架中的缓存策略?

    我编写了自己的小型 PHP MVC 框架 现在正在探索 PHP MVC 框架中的缓存策略 我正在考虑可以缓存什么 在哪里以及如何缓存 我的框架是简单的MVC框架 我有前端控制器 它启动应用程序 注册类自动加载 设置 php 运行时指令 最后
  • 如何在没有 SSH 和 CLI 访问生产的情况下部署 symfony 项目 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 大多数托管提供商仅具有 FTP 访问权限 是否可以 常见地进行 symfony 项目 3 x 或 4 x 的本地安装 然后通过 FTP 上
  • 将 docker-compose.yml 中的包安装到 docker 容器中

    我是 docker 和 docker compose 的初学者 我需要你的帮助 我正在使用 docker compose 制作 PHP NGINX PostgresQL symfony 开发环境 这里是 web image nginx 1
  • 在 Elasticsearch php API 中使用多种类型或索引

    我想使用查询多种类型和索引Elasticsearch PHP API 但我不知道怎么办 我应该将类型和索引的数组传递给 params params index index array of indices params type types
  • SimpleXML 返回空数组

    我正在尝试使用 Google Maps API 和 PHP SimpleXML 获取城市的纬度和经度 我尝试这样做 xml simplexml load file http maps googleapis com maps api geoc

随机推荐