首页 > 解决方案 > 对子项运行多个 XPath 查询还是对整个 HTML 文档运行一些 XPath 查询?(PHP)

问题描述

我想使用 DOM 解析和 XPath 抓取网站。HTML 页面有 128 个结果。

对整个 HTML 运行一个 XPath 查询然后对结果运行许多 XPath 查询是否更好:

$video_urls = $xpath->query('//div[contains(@class, "vid")]/a/@href');
foreach($videos as $video) {
    $video_url = $xpath->query('./a/@href', $video)->item(0)->nodeValue;
    $thumb = $xpath->query('./a/img/@src', $video)->item(0)->nodeValue;
    $title = $xpath->query('./a/img/@alt', $video)->item(0)->nodeValue;
}

或者对整个 HTML 运行 4 个 XPath 查询:

$videos = $xpath->query('//div[contains(@class, "vid")]');
$video_urls = $xpath->query('//div[contains(@class, "vid")]/a/@href');
$thumbs = $xpath->query('//div[contains(@class, "vid")]/a/img/@src');
$titles = $xpath->query('//div[contains(@class, "vid")]/a/img/@alt');

标签: phphtmldomxpath

解决方案


如第二个示例所示,不那么频繁地查询 DOM 应该会更快。但这并不意味着什么,最终,这取决于您的要求。我怀疑真实的单词执行时间差别不大,是吗?

但是,从您的示例中猜测,这种方法有一个问题:假设所有四个查询具有相同数量的结果,并且数组中的给定索引包含在您稍后迭代它们时从相同 DOM 元素中删除的信息。如果情况并非总是如此,这将导致各种混乱。

第一种方法可以说更容易掌握,并且可能不太容易出错,但会带来性能损失——这有关系吗?


推荐阅读