PHP使用DOMDocument抓取外部HTML页面Merk字段值(Opel)实现问题
现有代码存在的问题
DOMDocument::loadHTML()方法仅接收HTML字符串作为参数,不能直接传入远程URL,你需要先主动获取目标页面的HTML内容getElementsByTagName('row')是匹配HTML标签为<row>的元素,你需要匹配的是class="row"下的元素,使用DOMXPath做条件查询效率更高
完整实现代码
<?php // 1. 获取目标页面的HTML内容 $htmlContent = file_get_contents('https://centraalbeheerkentekencheck.azurewebsites.net/?kenteken=L-762-LZ'); if (!$htmlContent) { die('页面内容获取失败'); } // 2. 初始化DOMDocument,屏蔽HTML不规范的警告 $dom = new DOMDocument(); libxml_use_internal_errors(true); $dom->loadHTML($htmlContent); libxml_clear_errors(); $dom->preserveWhiteSpace = false; // 3. 初始化XPath查询对象 $xpath = new DOMXPath($dom); // 4. 定位Merk对应的取值节点 // 查询逻辑:找到内部文本为Merk的label类div,取它下一个value类的兄弟节点 $valueNode = $xpath->query('//div[contains(@class, "label") and normalize-space(text())="Merk"]/following-sibling::div[contains(@class, "value")]')->item(0); if ($valueNode) { // 提取文本并去除首尾空白 $merkValue = trim($valueNode->nodeValue); echo $merkValue; // 输出结果为Opel } else { echo '未找到Merk对应的值'; }
补充说明
如果你的PHP环境关闭了allow_url_fopen配置导致file_get_contents无法获取远程内容,可以改用curl方式获取HTML:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://centraalbeheerkentekencheck.azurewebsites.net/?kenteken=L-762-LZ'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $htmlContent = curl_exec($ch); curl_close($ch);
内容的提问来源于stack exchange,提问作者Vidhi Sharma
相关产品推荐
相关产品推荐

