2017-10-20 179 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]'; 

這仍然是易碎的,當程序員改變頁面的格式,但它試圖本地化代碼儘可能。