2010-09-24 147 views
2

我试图抓取来自Google搜索页面的链接。我正在使用下面的xpath到在php中使用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>"; 
} 

样本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> 
+0

你可以发布你正在试图解析HTML? – Oded 2010-09-24 10:22:25

+0

你不能使用:'// li [@ class ='l']/h3/a'?获得hrefs? – RobertPitt 2010-09-24 10:24:25

+0

我试图解析这个谷歌结果http://www.google.de/#hl=de&source=hp&q=knx&fp=243300290dd3cf5d – LiveEn 2010-09-24 10:28:35

回答

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)就足够了)。

+0

我试过了,似乎没有任何东西显示出来。 – LiveEn 2010-09-24 11:45:18

+0

你没有复制/粘贴代码吗? – salathe 2010-09-24 11:49:10

+0

nope..when当我尝试一个转储var_dump($ hrefs)外循环我得到对象(DOMNodeList)#2(0){} ..但是当我尝试var_dump($ href);在foreach里面只是空白。 – LiveEn 2010-09-24 11:59:20

0

世界上没有所谓的HREF元素提供,这就是一个属性:

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

你可以只使用

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

我试过了,但没有显示任何结果.. – LiveEn 2010-09-24 10:46:19

+0

你可以做'var_dump($ element);'并告诉我它说了什么? – RobertPitt 2010-09-24 10:50:16

+0

它的怪异..没有显示..看起来像不迭代通过foreach循环。即使当我尝试回显一个简单的消息,它不会显示。 – LiveEn 2010-09-24 11:11:39

0

,您是否试图

$element->getElementsByTagName("a") 

,而不是

$element->getElementsByTagName("href")