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

PHP使用loadHTML()获取指定类前所有<p>标签及维基内容调用方法

获取特定类元素之前的所有

标签内容

没问题,我来帮你搞定这个需求。用PHP的DOMDocument结合DOMXPath可以很方便地实现这个功能,毕竟XPath在节点定位上比单纯用DOM方法灵活得多。下面是具体的实现步骤和代码示例:

实现思路

  1. 先加载目标HTML内容(比如你从维基百科获取的$html)
  2. 用XPath定位到那个特定类的元素
  3. 利用XPath的轴定位,获取该元素之前所有的<p>标签
  4. 遍历这些<p>标签,提取它们的文本内容

代码示例

假设我们要找的特定类是target-section,代码如下:

// 加载HTML内容(这里用你从维基百科获取的$html)
$html = file_get_contents('https://en.wikipedia.org/wiki/Sans-serif');
$dom = new DOMDocument();
@$dom->loadHTML($html); // 用@抑制HTML解析时的警告
$xpath = new DOMXPath($dom);

// 定位到特定类的元素(这里替换成你实际要找的类名)
$targetElement = $xpath->query('//*[contains(@class, "target-section")]')->item(0);

if ($targetElement) {
    // 获取目标元素之前的所有<p>标签
    $precedingPs = $xpath->query('preceding::p', $targetElement);
    
    // 遍历并输出每个<p>的内容
    foreach ($precedingPs as $p) {
        echo trim($p->nodeValue) . "\n\n";
    }
} else {
    echo "未找到指定类的元素";
}

关键细节说明

  • contains(@class, "target-section"):这里用contains是因为元素的class可能有多个值,比如class="foo target-section bar",这样能确保匹配到包含目标类的元素。如果你的目标类是唯一的,也可以用@class="target-section"来精确匹配。
  • preceding::p:XPath的preceding轴会选取当前节点之前的所有节点(不包括祖先节点),这里限定为<p>标签,正好符合我们的需求。
  • trim($p->nodeValue):去除文本前后的空白字符,让输出更整洁。

如果不想用XPath,也可以通过遍历节点的方式实现,但代码会繁琐一些,XPath是更高效的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:58:30