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 相关文章推荐
风格模板初级不完全修改教程
Oct 09 PHP
PHP备份数据库生成SQL文件并下载的函数代码
Feb 05 PHP
CodeIgniter生成网站sitemap地图的方法
Nov 13 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
Jan 09 PHP
ThinkPHP函数详解之M方法和R方法
Sep 10 PHP
PHP实现简单ajax Loading加载功能示例
Dec 28 PHP
LAMP环境使用Composer安装Laravel的方法
Mar 25 PHP
php图像验证码生成代码
Jun 08 PHP
Yii2 如何在modules中添加验证码的方法
Jun 19 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
php的无刷新操作实现方法分析
Feb 28 PHP
php查看一个变量的占用内存的实例代码
Mar 29 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
大师制作的中短波矿石收音机
2020/04/02 无线电
PHP个人网站架设连环讲(一)
2006/10/09 PHP
PHP 裁剪图片成固定大小代码方法
2009/09/09 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
2020/04/06 PHP
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
jQuery实现鼠标滑过点击事件音效试听
2015/08/31 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
JavaScript观察者模式(经典)
2015/12/09 Javascript
JavaScript动态生成二维码图片
2016/04/20 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
Vue响应式原理深入解析及注意事项
2017/12/11 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
Vue+Element ui 根据后台返回数据设置动态表头操作
2020/09/21 Javascript
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
深入解析Python中的WSGI接口
2015/05/11 Python
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
python中快速进行多个字符替换的方法小结
2016/12/15 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
python文件读写代码实例
2019/10/21 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
PyChon中关于Jekins的详细安装(推荐)
2020/12/28 Python
HTML文本属性&amp;颜色控制属性的实现
2019/12/17 HTML / CSS
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
小学运动会开幕词
2015/01/28 职场文书
赢在执行观后感
2015/06/16 职场文书
2016校本研修培训心得体会
2016/01/08 职场文书