使用PHP X-Path提取网页的特定部分

时间:2012-07-20 14:25:02

标签: php xpath domdocument

我追踪来自webapge的特定值; h1标签中的产品名称:

<div id="extendinfo_container">
  <a href="/someproduct.html"><h1><strong>Product Name</strong></h1></a>
  <div style="font-size:0;height:4px;"></div>
  <p class="text_breadcrumbs">
  <a href="/Our-Brands.html" target="_self"><img src="arrow_091.gif" align="absmiddle"/></a>
  <a href="/someproduct.html" target="_self" class="link_breadcrumbs">Product Name</a><img src="arrow_091.gif" align="absmiddle"/>
  <strong>Product Name</strong>
  <div class="dotted_line_blue">
    <img src="theme_shim.gif" height="1" width="100%" alt=" " />
  </div>
</div>

这是一个结构不合理的网站,有多个h1所以我不能简单地做getElementById('h1')。

我想尽可能具体地说明我得到的元素,这就是我的代码:

$doc = new DOMDocument();
@$doc->loadHTML(file_get_contents('http://url/to/website'));

// locate <div id="extendinfo_container"><a><h1><strong>(.*)</strong></h1></a> as product name
$x = new DOMXPath($doc);
$pName = $x->query('//div[@id="extendinfo_container"]/a/h1/strong');
var_dump($pName->nodeValue);

这是返回null。我需要使用什么查询来获取我想要的内容?

3 个答案:

答案 0 :(得分:1)

query()返回DOMNodeList,其中没有nodeValue属性。你必须选择一个元素(即第一个):

$pName = $x->query('//div[@id="extendinfo_container"]/a/h1/strong')->item(0);

或迭代它:

foreach( $pName as $el) {
    var_dump( $el->nodeValue);
}

其中任何一个都可以让您访问DOMNode,这是您正在寻找的。

答案 1 :(得分:0)

PHP的DOM 非常挑剔你加载到它的html。它会barf并拒绝加载即使是略有格式错误的文档。

关闭错误抑制(@$doc->loadHTML,删除@),并确保您在此页面上没有尝试分析。否则,您的XPath查询看起来很好,如果文档确实被正确加载/解析,它应该工作。

答案 2 :(得分:0)

查询工作正常。我正在访问错误的价值。以下是访问该值的正确方法:

var_dump($pName->item(0)->nodeValue);