2010-09-24 5 views
2

J'essaie d'obtenir des liens de la page de recherche Google. J'utilise l'être ci-dessous xpath àSaisir des liens en utilisant xpath dans php

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

saisir les liens. xPather l'évalue et donne le résultat. Mais quand je l'utilise avec mon php, il ne montre aucun résultat. Quelqu'un peut-il me dire ce que je fais de mal? Il n'y a rien de mal avec le cURL.

ci-dessous est mon code

$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>"; 
} 

échantillon Html fourni par Robert Pitt

<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

Pouvez-vous envoyer le code HTML que vous essayez d'analyser? – Oded

+0

ne pouvez-vous pas utiliser: '// li [@ class = 'l']/h3/a'? obtenir les hrefs? – RobertPitt

+0

Im essayant d'analyser ce résultat google http://www.google.de/#hl=de&source=hp&q=knx&fp=243300290dd3cf5d – LiveEn

Répondre

3

Vous pouvez rendre la vie plus simple en utilisant l'expression XPath originale que vous avez cité:

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

Ensuite, boucle sur les attributs correspondant comme:

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

Assurez-vous de vérifier si tous les attributs étaient apparié (var_dump($hrefs->length) suffirait).

+0

Je l'ai essayé et rien ne semble être affiché. – LiveEn

+0

Vous n'avez pas simplement copié/collé le code, n'est-ce pas? – salathe

+0

non ... quand j'essaye une vidage var_dump ($ hrefs) en dehors de la boucle j'obtiens l'objet (DOMNodeList) # 2 (0) {} .. Mais quand j'essaye un var_dump ($ href); à l'intérieur de la foreach est juste vide. – LiveEn

0

Theres aucun élément appelé href, thats un attribut:

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

Vous pouvez simplement utiliser

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

Je l'ai essayé mais il n'a pas montré de résultat. – LiveEn

+0

pouvez-vous faire 'var_dump ($ element);' et me montrer ce qu'il dit? – RobertPitt

+0

Son étrange .. Rien n'est affiché .. On dirait de ne pas itérer à travers la boucle foreach. Même lorsque j'essaie de faire écho à un message simple, il n'est pas affiché. – LiveEn

0

avez-vous essayé

$element->getElementsByTagName("a") 

au lieu de

$element->getElementsByTagName("href") 
Questions connexes