You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP DOMDocument和DOMXPath提取HTML中getFullData方法的内联参数并构建URL

解决方案:精准筛选并提取getFullData参数,构建目标数组

要搞定这个问题,我们可以通过精准XPath定位+正则解析参数+行数据关联整合三步实现,具体操作如下:

1. 用XPath精准锁定目标<a>标签

首先得把范围限定在searchTable表格内,并且只抓onclick属性里调用getFullData的<a>标签,这样能彻底避开其他无关的<a>标签干扰。对应的XPath表达式如下:

$xPath = new DOMXPath($doc);
// 仅匹配searchTable表格中、onclick包含getFullData的a标签
$targetLinks = $xPath->query("//table[@class='searchTable']//a[contains(@onclick, 'getFullData(')]");

2. 解析onclick参数并构建目标URL

观察getFullData( '', 'K0072', 'B20' )的参数格式,我们需要提取第二个和第三个字符串参数(也就是part和m的值),用正则表达式就能轻松搞定:

// 适配参数周围可能存在的空格,精准匹配getFullData的参数
$pattern = "/getFullData\s*\(\s*'([^']*)'\s*,\s*'([^']*)'\s*,\s*'([^']*)'\s*\)/";
foreach ($targetLinks as $link) {
    $onclickAttr = $link->getAttribute('onclick');
    if (preg_match($pattern, $onclickAttr, $matches)) {
        $part = $matches[2];
        $model = $matches[3];
        $url = "https://pi.php?part={$part}&m={$model}";
        // 后续将该URL关联到对应行的数据中
    }
}

3. 整合行数据与URL,生成最终数组

比起原代码遍历所有<td>的方式,直接遍历表格的每一行(跳过表头)会更可靠,同时能自然关联该行内的<a>标签参数。完整代码如下:

$doc = new DOMDocument();
$doc->loadHTML(getHtml());
$doc->preserveWhiteSpace = false;
$doc->encoding = 'UTF-8';

$xPath = new DOMXPath($doc);
// 获取searchTable的所有数据行,跳过表头行
$rows = $xPath->query("//table[@class='searchTable']//tbody/tr[position() > 1]");
$dataArray = [];

$pattern = "/getFullData\s*\(\s*'([^']*)'\s*,\s*'([^']*)'\s*,\s*'([^']*)'\s*\)/";

foreach ($rows as $row) {
    // 提取当前行所有td的文本内容
    $tds = $xPath->query("./td", $row);
    $rowData = [];
    foreach ($tds as $td) {
        $rowData[] = trim($td->textContent);
    }
    
    // 定位当前行第一个td内的目标a标签,提取参数并构建URL
    $link = $xPath->query("./td[1]/a[contains(@onclick, 'getFullData(')]", $row)->item(0);
    if ($link) {
        $onclickAttr = $link->getAttribute('onclick');
        if (preg_match($pattern, $onclickAttr, $matches)) {
            $part = $matches[2];
            $model = $matches[3];
            $rowData[] = "https://pi.php?part={$part}&m={$model}";
        }
    }
    
    $dataArray[] = $rowData;
}

var_dump($dataArray);
die();

代码细节说明:

  • 用//tbody/tr[position() > 1]精准跳过表头行,只处理数据行;
  • 先提取当前行所有<td>的文本,保留原数组的前4项结构;
  • 定位当前行第一个<td>内的目标<a>标签,解析参数后生成URL并追加到行数据末尾;
  • 正则表达式兼容参数周围的空格,适配不同格式的onclick属性值。

执行这段代码后,就能得到你需要的包含目标URL的最终数组结构。

内容的提问来源于stack exchange,提问作者Subrata Sarkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:52:35