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


Posted in PHP onOctober 15, 2014

前言

我们在写一个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每天的比分牌、今日哈工大的新闻同步、股市行情等等。都能实现同步实时更新。暂时只想到这些,欢迎大家拍砖~

PHP 相关文章推荐
提高PHP性能的编码技巧以及性能优化详细解析
Aug 24 PHP
php使用curl发送json格式数据实例
Dec 17 PHP
windows下配置apache+php+mysql时出现问题的处理方法
Jun 20 PHP
php操作xml入门之cdata区段
Jan 23 PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 PHP
Yii2中Restful API原理实例分析
Jul 25 PHP
PHP实现判断数组是一维、二维或几维的方法
Feb 06 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
Feb 15 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
Aug 18 PHP
利用php + Laravel如何实现部署自动化详解
Oct 11 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
跟我学Laravel之视图 &amp; Response
Oct 15 #PHP
跟我学Laravel之请求与输入
Oct 15 #PHP
跟我学Laravel之路由
Oct 15 #PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 #PHP
跟我学Laravel之配置Laravel
Oct 15 #PHP
跟我学Laravel之安装Laravel
Oct 15 #PHP
跟我学Laravel之快速入门
Oct 15 #PHP
You might like
POST一个JSON格式的数据给Restful服务实例详解
2017/04/07 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
jquery ui dialog里调用datepicker的问题
2009/08/06 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
2011/04/16 Javascript
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
Vue实现手机计算器
2020/08/17 Javascript
python实现封装得到virustotal扫描结果
2014/10/05 Python
Python使用内置json模块解析json格式数据的方法
2017/07/20 Python
Windows下python3.6.4安装教程
2018/07/31 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
详解django中Template语言
2020/02/22 Python
基于python实现可视化生成二维码工具
2020/07/08 Python
python的链表基础知识点
2020/09/13 Python
Python操作Excel的学习笔记
2021/02/18 Python
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
什么是测试驱动开发(TDD)
2012/02/15 面试题
社会实践心得体会
2014/01/03 职场文书
工作疏忽检讨书
2014/01/25 职场文书
六月份红领巾广播稿
2014/02/03 职场文书
个人实习生的自我评价
2014/02/16 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
导游词之井冈山
2019/11/20 职场文书