我最近在PHP中使用DOMXpath并取得了成功,试图获得更多使用体验我一直在玩抓住不同网站的某些元素。我无法从http://www.theweathernetwork.com/weather/cape0005这个网站上获取天气标记。
特别是我想要
//*[@id='theTemperature']
这就是我所拥有的
$url = file_get_contents('http://www.theweathernetwork.com/weather/cape0005');
$dom = new DOMDocument();
@$dom->loadHTML($url);
$xpath = new DOMXPath($dom);
$tags = $xpath->query("//*[@id='theTemperature']");
foreach ($tags as $tag){
echo $tag->nodeValue;
}
我在这里做错了吗?我能够在页面上的其他标签上生成实际结果,但特别是没有这个。
提前致谢。
答案 0 :(得分:2)
您可能希望改进DOMDocument调试技巧,这里有一些提示(Demo):
<?php
header('Content-Type: text/plain;');
$url = file_get_contents('http://www.theweathernetwork.com/weather/cape0005');
$dom = new DOMDocument();
@$dom->loadHTML($url);
$xpath = new DOMXPath($dom);
$tags = $xpath->query("//*[@id='theTemperature']");
foreach ($tags as $i => $tag){
echo $i, ': ', var_dump($tag->nodeValue), ' HTML: ', $dom->saveHTML($tag), "\n";
}
$i
中使用foreach
执行此操作。var_dump
->nodeValue
,有助于显示它究竟是什么。saveHTML
函数输出HTML。实际输出:
0: string(0) ""
HTML: <p id="theTemperature"></p>
你可以很容易地发现元素是空的,所以温度必须从其他地方进入,例如通过javascript。检查浏览器的网络工具。
答案 1 :(得分:1)
发生的事情很简单,页面包含一个空的id =“theTemperature”元素,它是一个用javascript填充的占位符。 file_get_contents()将只下载页面,而不是执行javascript,因此元素保持为空。尝试在禁用javascript的情况下在浏览器中加载页面以自行查看
答案 2 :(得分:0)
您尝试选择的元素确实是空的。该页面通过ajax将温度加载到该id中。特别是这个脚本:
http://www.theweathernetwork.com/common/js/master/citypage_ajax.js?cb=201301231338
但是当你执行file_get_contents时,这些脚本显然无法解决。我会选择使用guido的RSS解决方案