2010-09-24 148 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")