PHP实现采集中国天气网未来7天天气

 更新时间:2014年10月15日 12:53:12   投稿:junjie  
这篇文章主要介绍了PHP实现采集中国天气网未来7天天气方法,本文详细的讲解了需求的实现,也可以做为学习PHP采集的入门教程,需要的朋友可以参考下

前言

我们在写一个Web程序的时候,总会想着把自己的网站更美观一些,功能能更多一些,有时候写一些小的工具或者加上小的插件会让我们的站点更加完善。比如万年历功能,比如我们现在要讲的天气预报功能。

当然我们没法利用专业的卫星接受数据,所以我们的天气数据来自现有的天气预报网站。利用天气预报网站提供的数据服务,我们可以写一个PHP爬虫,然后动态采集我们所需要的数据,并且在目标站点更新数据的时候,我们的程序也能做到同步更新,自动地获取数据。

下面就介绍一下如何编写一个简单的PHP数据采集程序(PHP爬虫)。

原理

给定一个网页的URL,使用PHP下载该网页并得到网页内容,然后通过正则表达式将其中我们感兴趣的数据提取出来,然后输出。

具体在这个例子中,我们要抓取的网页是 http://www.weather.com.cn/weather/101050101.shtml,我们感兴趣的是页面中的未来7天天气情况。

实现

0.获取天气预报网页的URL:

复制代码 代码如下:

$url = "http://www.weather.com.cn/weather/101050101.shtml";
$page_content = file_get_contents($url);

在这里,file_get_contents() 函数会将 $url 指向的网页下载下来,并把网页内容作为一个字符串返回。于是,$page_content 变量中就是我们要抓取的网页的全部HTML代码了。接下来,我们要从其中抽取我们需要的数据。

1.使用正则表达式匹配符合条件的字符串

先输出 $page_content 的值,然后查看网页源代码,观察可知我们需要的字符串可以在

复制代码 代码如下:

<!--day 1 -->
......
<!--day 7 -->

这两行的注释里找到。

使用正则表达式来取得 <!--day 1--> 和 <!--day 7--> 之间的所有内容:

复制代码 代码如下:

eregi("<!--day 1-->(.*)<!--day 7-->",$page_content,$res);

2.补全页面中图片的路径

由于远程网页中的图片路径都是像 /m2/i/icon_weather/29x20/d01.gif 这样的相对路径,我们需要把这些路径补全,在它们前面加上 http://www.weather.com.cn。

复制代码 代码如下:

$forecast = str_replace("<img src="","<img src="http://www.weather.com.cn",$res[0]);

至此,$forecast 中就是我们需要的天气预报信息了。这个简单的PHP爬虫也就写好了。

源代码

以下是这个抓取天气预报小程序的完整源代码,其中添加了一些测量各部分程序运行时间的代码,并可以通过设置 $start 和 $end 的值来控制抓取哪几天的信息。

复制代码 代码如下:

$url = "http://www.weather.com.cn/weather/101050101.shtml";
$t1 = time();
   
$page_content = file_get_contents($url);
$t2 = time();

$start = 1;
$end = 3;

if ($end > 7){
    echo "超出预报能力范围,请重新设置!";
}else {
    echo "未来".($end-$start)."天哈尔滨的天气预报("
              .date('Y-m-j')."发布)";

    eregi("--day $start--(.*)--day $end--", $page_content, $res);

    $forecast = str_replace("<img src=\"",
        "<img src=\"http://www.weather.com.cn", $res[0]);
    $t3 = time();

    echo $forecast;

    echo 'First step costs '.($t2 - $t1).' ms.';
    echo 'Last step costs '.($t3 - $t2).' ms.';
}

其他应用例子

同样的思路可以尝试的有:NBA每天的比分牌、今日哈工大的新闻同步、股市行情等等。都能实现同步实时更新。暂时只想到这些,欢迎大家拍砖~

相关文章

  • thinkphp配置连接数据库技巧

    thinkphp配置连接数据库技巧

    这篇文章主要介绍了thinkphp配置连接数据库技巧,实例讲述了ThinkPHP入口同目录下配置数据库及控制器另外连接数据库的技巧,需要的朋友可以参考下
    2014-12-12
  • thinkPHP框架对接支付宝即时到账接口回调操作示例

    thinkPHP框架对接支付宝即时到账接口回调操作示例

    这篇文章主要介绍了thinkPHP框架对接支付宝即时到账接口回调操作,结合实例形式分析了thinkPHP针对支付宝接口回调操作的原理与具体操作步骤,需要的朋友可以参考下
    2016-11-11
  • CodeIgniter常用知识点小结

    CodeIgniter常用知识点小结

    这篇文章主要介绍了CodeIgniter常用知识点,包括跳转、常量定义、语言设置及支持get方法传参等技巧,需要的朋友可以参考下
    2016-05-05
  • php实现的任意进制互转类分享

    php实现的任意进制互转类分享

    这篇文章主要介绍了php实现的任意进制互转类分享,本文直接给出了实现代码,需要的朋友可以参考下
    2015-07-07
  • Laravel框架源码解析之反射的使用详解

    Laravel框架源码解析之反射的使用详解

    这篇文章主要介绍了Laravel框架源码解析之反射的使用,结合实例形式详细分析了Laravel源码解析中反射的基本原理、使用方法及操作注意事项,需要的朋友可以参考下
    2020-05-05
  • 源码分析 Laravel 重复执行同一个队列任务的原因

    源码分析 Laravel 重复执行同一个队列任务的原因

    laravel 的队列服务对各种不同的后台队列服务提供了统一的 API,下面这篇文章通过源码分析给大家介绍了关于 Laravel 重复执行同一个队列任务的原因,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12
  • ThinkPHP模版引擎之变量输出详解

    ThinkPHP模版引擎之变量输出详解

    这篇文章主要介绍了ThinkPHP模版引擎的变量输出用法,分析了变量输出的常见用法与使用技巧,非常具有实用价值,需要的朋友可以参考下
    2014-12-12
  • PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】

    PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】

    这篇文章主要介绍了PHP 范围解析操作符(::)用法,结合具体实例形式分析了PHP使用范围解析操作符(::)访问静态成员和类常量相关操作技巧与注意事项,需要的朋友可以参考下
    2020-04-04
  • php实现微信公众平台发红包功能

    php实现微信公众平台发红包功能

    这篇文章主要为大家详细介绍了php实现微信公众平台发红包功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Laravel 创建可以传递参数 Console服务的例子

    Laravel 创建可以传递参数 Console服务的例子

    今天小编就为大家分享一篇Laravel 创建可以传递参数 Console服务的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10

最新评论