我正在尝试从我的php文件中的天气页面访问某些内容。该网站是:http://www.weather-forecast.com/locations/Bergen/forecasts/latest,在视图来源中,我希望能够从以下信息中获取信息:“3天天气预报摘要:”以及其中的所有必需信息。
我的代码到目前为止:
<?php
$contents = file_get_contents("http://www.weather-forecast.com/locations/Bergen/forecasts/latest");
preg_match('/3 Day Weather Forecast Summary:<\/b><span class="read-more-small"><span class="read-more-content"> <span class="phrase"> (.*?) </s', $contents, $matches);
print_r($matches);
?>
由于某种原因,它不会给我源代码中的跨度之间的所有信息。我想要访问的是:
3天天气预报摘要:中度降雨(总共17毫米),周一早上最重。非常温和(周三下午最高18°C,周二晚上最低温度为11°C)。风量减少(周一早上从WSW吹来的新风,周一晚上平静)。
像这样在干净的文字中。有什么建议吗?问候,Bojar
答案 0 :(得分:0)
据我所知,你的正则表达式不应该在通配符匹配周围包含空格,因为网站源在3天摘要之前和之后没有任何空格。尝试:
'... <span class="phrase">(.*?)</s'
完整电话:
preg_match(
'/3 Day Weather Forecast Summary:<\/b><span class="read-more-small"><span class="read-more-content"> <span class="phrase">(.*?)</s',
$contents,
$matches
);
编辑:刚刚确认没有空格的模式会产生预期的结果。
此外,请注意在长期或任何个人爱好项目之外的任何事情中使用此类解析。在HTML结构,CSS类等等甚至最小的变化(它取决于空白!)之后,它极易发生故障。对于更可靠的东西,考虑使用带有CSS选择器的HTML解析器,这样你就可以看到例如文档中的span.phrase
。虽然这仍然不完美,但它比preg_match
更稳定。