在网站上使用preg_match访问信息时返回空数组

时间:2017-07-17 13:44:56

标签: php

我正在尝试从我的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

1 个答案:

答案 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更稳定。