2017-10-20 131 views
0

我需要刮这个HTML页面...获取分辩Xpath的HTML元素

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

enter image description here

....使用PHP和XPath得到像值下字符串“CODICE BIANCO”

(注意:如果您尝试浏览它,则可以在该页面看到不同的值......无所谓......,它们正在改变...)

我使用这个PHP代码示例打印的价值...

<?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; 

?> 

我同时使用Chrome和Firefox网页控制台提取的XPath ...

建议/例子?

回答

1

Chrome和Firefox都可能通过在<table>中添加<tbody>元素来改善原始HTML,因为原始HTML不包含它们。 CURL不会这样做,这就是XPATH失败的原因。试试这个来代替:

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

它现在正在工作......任何替代工具来为我的HTML页面元素提取xpath? – Cesare

1

而不是依靠什么是可能相当脆弱的层次(我们都发现自己在时代大厦),它可能是值得寻找相对靠近你要找的数据进行处理。我刚刚完成了XPath,但它基本上从文本“CODICE BIANCO”导航并找到与该字符串相关的数据。

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

这仍然是易碎的,当程序员改变页面的格式,但它试图本地化代码尽可能。