在php中使用xpath抓取链接

时间:2010-09-24 10:19:21

标签: php xpath

我正在尝试从Google搜索页面获取链接。我正在使用低于xpath的

//div[@id='ires']/ol[@id='rso']/li/h3/a/@href

抓住链接。 xPather评估它并给出结果。但是,当我使用它与我的PHP它没有显示任何结果。有人可以告诉我我做错了什么吗? cURL没有任何问题。

下面是我的代码

$dom = new DOMDocument();
@$dom->loadHTML($result);

$xpath=new DOMXPath($dom);
$elements = $xpath->evaluate("//div[@id='ires']/ol[@id='rso']/li/h3/a");

foreach ($elements as $element)
{
   $link  = $element->getElementsByTagName("href")->item(0)->nodeValue;

   echo $link."<br>";
}

Robert Pitt提供的示例Html

<li class="g w0">
    <h3 class="r">
       <a href="" class="l"><em>LINK</em></a>
    </h3>
    <button class="ws" title=""></button>
    <div class="s">
        META
    </div>
</li>

3 个答案:

答案 0 :(得分:3)

通过使用您引用的原始XPath表达式,您可以简化生活:

//div[@id='ires']/ol[@id='rso']/li/h3/a/@href

然后,遍历匹配的属性,如:

$hrefs = $xpath->evaluate(...);
foreach ($hrefs as $href) {
    echo $href->value . "<br>";
}

请务必检查是否有匹配的属性(var_dump($hrefs->length)就足够了。)

答案 1 :(得分:0)

没有名为href的元素,即属性:

$link  = $element->getElementsByTagName("href")->item(0)->nodeValue;

你可以使用

$link  = $element->getAttribute('href');

答案 2 :(得分:0)

你试过

吗?
$element->getElementsByTagName("a")

而不是

$element->getElementsByTagName("href")