2017-10-20 36 views
0

je dois gratter cette page HTML ...rigth Xpath pour les éléments HTML

http://www1.usl3.toscana.it/default.asp?page=ps&ospedale=3

enter image description here

.... en utilisant PHP et XPath pour obtenir les valeurs comme sous la chaîne "CODICE BIANCO"

(NOTE: vous pourriez voir différentes valeurs dans cette page si vous essayez de le parcourir ... ce n'est pas grave .. ,, ils changent dinamically ....)

J'utilise cet exemple de code PHP pour imprimer la valeur ...

<?php 
    ini_set('display_errors', 'On'); 
    error_reporting(E_ALL); 

    include "./tmp/vendor/autoload.php"; 

    $url = 'http://www1.usl3.toscana.it/default.asp?page=ps&ospedale=3'; 

    //$xpath_for_parsing = '/html/body/div/div[2]/table[2]/tbody/tr[1]/td/table/tbody/tr[3]/td[1]/table/tbody/tr[11]/td[3]/b'; 

    $xpath_for_parsing = '//*[@id="contentint"]/table[2]/tbody/tr[1]/td/table/tbody/tr[3]/td[1]/table/tbody/tr[11]/td[3]/b'; 

    //#Set CURL parameters: pay attention to the PROXY config !!!! 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
    curl_setopt($ch, CURLOPT_PROXY, ''); 
    $data = curl_exec($ch); 
    curl_close($ch); 

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

    $xpath = new DOMXPath($dom); 
    $colorWaitingNumber = $xpath->query($xpath_for_parsing); 
    $theValue = 'N.D.'; 
    foreach($colorWaitingNumber as $node) 
    { 
     $theValue = $node->nodeValue; 
    } 

    print $theValue; 

?> 

J'ai extrait le XPath en utilisant les deux consoles Web Chrome et Firefox ...

Suggestions/exemples ?

Répondre

1

Chrome et Firefox améliorent probablement le code HTML d'origine en ajoutant <tbody> éléments à l'intérieur <table> car le code HTML d'origine ne les contient pas. CURL ne le fait pas et c'est pourquoi votre XPATH échoue. Essayez plutôt celui-ci:

$xpath_for_parsing = '//*[@id="contentint"]/table[2]/tr[1]/td/table/tr[3]/td[1]/table/tr[11]/td[3]/b'; 
+0

Cela fonctionne maintenant ... des outils de remplacement pour extraire xpath pour mes éléments de page HTML? – Cesare

1

Plutôt que de compter sur ce qui est potentiellement une hiérarchie assez fragile (que nous nous trouvons tous la construction parfois), il peut être intéressant de regarder quelque chose relativement proche des données que vous cherchez. Je viens de faire le XPath, mais il navigue essentiellement à partir du texte "CODICE BIANCO" et trouve les données relatives à cette chaîne.

$xpath_for_parsing = '//*[text()="CODICE BIANCO"]/../../following-sibling::tr[1]//descendant::b[2]'; 

C'est encore cassable lorsque les codeurs changent le format de page, mais il tente de localiser le code, autant que possible.