試圖從AEC網站提取一些信息(例如http://apps.aec.gov.au/eSearch/LocalitySearchResults.aspx?filter=3977&filterby=Postcode)。我正在運行的XPath查詢是「//x:tbody/x:tr/x:td[4]/x:a
」,我已經在XPath Checker(Firefox擴展)中進行了測試,並且它提取了相關的本地數據。通過PHP中的XPath提取信息
我然後使用PHP來加載頁面,執行查詢,然後遍歷結果。
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$html = curl_exec($ch);
curl_close($ch);
# Create a DOM parser object
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html);
$xpath = new DOMXpath($dom);
$elements = $xpath->query('//tbody/tr/td[4]/a');
foreach ($elements as $element) {
echo $element;
}
我然後讓:
Warning: Invalid argument supplied for foreach() in /home/givesh5/public_html/dig/electoratesearch.php on line 41
看來,查詢返回某種布爾而不是查詢匹配列表?
相關標記如下:
<table cellspacing="0" rules="all" border="1" id="ContentPlaceHolderBody_gridViewLocalities" style="border-collapse:collapse;">
<tr class="headingLink">
<th scope="col"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolderBody$gridViewLocalities','Sort$StateAb')">State</a></th><th scope="col"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolderBody$gridViewLocalities','Sort$LocalityNm')">Locality/Suburb</a></th><th scope="col"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolderBody$gridViewLocalities','Sort$Postcode')">Postcode</a></th><th scope="col"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolderBody$gridViewLocalities','Sort$DivisionNm')">Electorate</a></th><th scope="col"><a href="javascript:__doPostBack('ctl00$ContentPlaceHolderBody$gridViewLocalities','Sort$DivisionNmRedistributed')">Redistributed Electorate</a></th><th scope="col">Other Locality(s)</th>
</tr><tr>
<td>VIC</td><td>BOTANIC RIDGE</td><td><a href="LocalitySearchResults.aspx?filter=3977&filterby=Postcode">3977</a></td><td><a href="LocalitySearchResults.aspx?filter=Flinders&filterby=Electorate&divid=211">Flinders</a></td><td></td><td> </td>
</tr><tr>
<td>VIC</td><td>CANNONS CREEK</td><td><a href="LocalitySearchResults.aspx?filter=3977&filterby=Postcode">3977</a></td><td><a href="LocalitySearchResults.aspx?filter=Flinders&filterby=Electorate&divid=211">Flinders</a></td><td></td><td> </td>
</tr><tr>
<td>VIC</td><td>CRANBOURNE</td><td><a href="LocalitySearchResults.aspx?filter=3977&filterby=Postcode">3977</a></td><td><a href="LocalitySearchResults.aspx?filter=Holt&filterby=Electorate&divid=216">Holt</a></td><td></td><td> </td>
</tr><tr>
<td>VIC</td><td>CRANBOURNE EAST</td><td><a href="LocalitySearchResults.aspx?filter=3977&filterby=Postcode">3977</a></td><td><a href="LocalitySearchResults.aspx?filter=Flinders&filterby=Electorate&divid=211">Flinders</a></td><td></td><td> </td>
</tr><tr>
<td>VIC</td><td>CRANBOURNE EAST</td><td><a href="LocalitySearchResults.aspx?filter=3977&filterby=Postcode">3977</a></td><td><a href="LocalitySearchResults.aspx?filter=Holt&filterby=Electorate&divid=216">Holt</a></td><td></td><td> </td>
</tr><tr>
<td>VIC</td><td>CRANBOURNE NORTH</td><td><a href="LocalitySearchResults.aspx?filter=3977&filterby=Postcode">3977</a></td><td><a href="LocalitySearchResults.aspx?filter=Holt&filterby=Electorate&divid=216">Holt</a></td><td></td><td> </td>
</tr><tr>
<td>VIC</td><td>CRANBOURNE SOUTH</td><td><a href="LocalitySearchResults.aspx?filter=3977&filterby=Postcode">3977</a></td><td><a href="LocalitySearchResults.aspx?filter=Flinders&filterby=Electorate&divid=211">Flinders</a></td><td></td><td> </td>
</tr><tr>
<td>VIC</td><td>CRANBOURNE WEST</td><td><a href="LocalitySearchResults.aspx?filter=3977&filterby=Postcode">3977</a></td><td><a href="LocalitySearchResults.aspx?filter=Holt&filterby=Electorate&divid=216">Holt</a></td><td></td><td> </td>
</tr><tr>
<td>VIC</td><td>DEVON MEADOWS</td><td><a href="LocalitySearchResults.aspx?filter=3977&filterby=Postcode">3977</a></td><td><a href="LocalitySearchResults.aspx?filter=Flinders&filterby=Electorate&divid=211">Flinders</a></td><td></td><td> </td>
</tr><tr>
<td>VIC</td><td>FIVEWAYS</td><td><a href="LocalitySearchResults.aspx?filter=3977&filterby=Postcode">3977</a></td><td><a href="LocalitySearchResults.aspx?filter=Flinders&filterby=Electorate&divid=211">Flinders</a></td><td></td><td><a href="LocalitySearchResults.aspx?filter=DEVON+MEADOWS&filterby=LocalityorSuburb&state=VIC">DEVON MEADOWS</a></td>
</tr><tr>
<td>VIC</td><td>JUNCTION VILLAGE</td><td><a href="LocalitySearchResults.aspx?filter=3977&filterby=Postcode">3977</a></td><td><a href="LocalitySearchResults.aspx?filter=Flinders&filterby=Electorate&divid=211">Flinders</a></td><td></td><td> </td>
</tr><tr>
<td>VIC</td><td>SANDHURST</td><td><a href="LocalitySearchResults.aspx?filter=3977&filterby=Postcode">3977</a></td><td><a href="LocalitySearchResults.aspx?filter=Isaacs&filterby=Electorate&divid=219">Isaacs</a></td><td></td><td> </td>
</tr><tr>
<td>VIC</td><td>SKYE</td><td><a href="LocalitySearchResults.aspx?filter=3977&filterby=Postcode">3977</a></td><td><a href="LocalitySearchResults.aspx?filter=Dunkley&filterby=Electorate&divid=210">Dunkley</a></td><td></td><td> </td>
</tr><tr>
<td>VIC</td><td>SKYE</td><td><a href="LocalitySearchResults.aspx?filter=3977&filterby=Postcode">3977</a></td><td><a href="LocalitySearchResults.aspx?filter=Isaacs&filterby=Electorate&divid=219">Isaacs</a></td><td></td><td> </td>
</tr>
</table>
'DOMXpath'如果*表達式的格式不正確或contextnode無效* – adeneo 2015-04-04 09:19:33
能否請您提供標記的相關部分返回false你正在解析。從Firefox派生的XPath來自可包含隱含標記的實時DOM。所以以這種方式得到它們是不可靠的。此外,你究竟想要獲取什麼? – Gordon 2015-04-04 09:30:59
用標記更新了OP,謝謝。在這種情況下,試圖獲取本地鏈接文本(例如文本)。例如,在前兩個單元中,這將是「弗林德斯」。 –
Edward
2015-04-04 09:35:16