我需要抓取这个HTML页面......
http://www1.usl3.toscana.it/default.asp?page=ps&ospedale=3
....使用PHP和XPath在字符串" CODICE BIANCO"
下获取 0 等值(注意:如果您尝试浏览它,您可以在该页面中看到不同的值...它并不重要......它们会改变它们的行为......)
我使用此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 ...
建议/示例?
答案 0 :(得分:1)
Chrome和Firefox最有可能通过在<tbody>
中添加<table>
元素来改进原始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';
答案 1 :(得分:1)
不是依赖于可能非常脆弱的层次结构(我们都发现自己有时会建立),而是可能值得寻找相对接近您所寻找数据的东西。我刚刚完成了XPath,但它基本上是从文本&#34; CODICE BIANCO&#34;并找到相对于该字符串的数据。
$xpath_for_parsing = '//*[text()="CODICE BIANCO"]/../../following-sibling::tr[1]//descendant::b[2]';
当编码器更改页面格式时,这仍然可以破解,但它会尝试尽可能地本地化代码。