PHP数据采集程序采集天气网数据实例演示
发布:smiling 来源: PHP粉丝网 添加日期:2014-07-15 14:19:51 浏览: 评论:0
前言:我们在写一个Web程序的时候,总会想着把自己的网站更美观一些,功能能更多一些,有时候写一些小的工具或者加上小的插件会让我们的站点更加完善,比如万年历功能,比如我们现在要讲的天气预报功能.
当然我们没法利用专业的卫星接受数据,所以我们的天气数据来自现有的天气预报网站,利用天气预报网站提供的数据服务,我们可以写一个PHP爬虫,然后动态采集我们所需要的数据,并且在目标站点更新数据的时候,我们的程序也能做到同步更新,自动地获取数据.
下面就介绍一下如何编写一个简单的PHP数据采集程序(PHP爬虫)。
原理:给定一个网页的URL,使用PHP下载该网页并得到网页内容,然后通过正则表达式将其中我们感兴趣的数据提取出来,然后输出.
具体在这个例子中,我们要抓取的网页是 http://www.天气网com.cn/weather/101050101.shtml,我们感兴趣的是页面中的未来7天天气情况.
实现:0.获取天气预报网页的URL,代码如下:
$url = "http://www.天气网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.天气网com.cn,代码如下:
$forecast = str_replace("<img src="","<img src="http://www.天气网com.cn",$res[0]);
至此,$forecast 中就是我们需要的天气预报信息了,这个简单的PHP爬虫也就写好了.
源代码:以下是这个抓取天气预报小程序的完整源代码,其中添加了一些测量各部分程序运行时间的代码,并可以通过设置 $start 和 $end 的值来控制抓取哪几天的信息,代码如下:
- $url = "http://www.天气网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.天气网com.cn", $res[0]);
- $t3 = time();
- echo $forecast;
- echo 'First step costs '.($t2 - $t1).' ms.';
- echo 'Last step costs '.($t3 - $t2).' ms.';
- }
Tags: PHP数据采集 实例 天气
相关文章
- ·用实例分析PHP5异常处理(2013-11-13)
- ·两款php导出excel实例(2013-12-16)
- ·php 实现jquery+ajax 跨域数据调用实例(2014-01-03)
- ·PHP JSON数据处理实例程序用法(2014-01-06)
- ·php中cookie实现二级域名可访问操作实例(2014-01-07)
- ·PHP curl 获取响应的状态实例(2014-01-08)
- ·PHP Curl多线程实现原理与实例详解(2014-01-09)
- ·php 通过curl post发送json数据实例(2014-01-10)
- ·php中设计模式工厂模式和单例模式实例(2014-01-16)
- ·PHP多进程编程实例说明(2014-01-17)
- ·PHP socket模拟POST请求实例(2014-01-18)
- ·phpmailer 发送邮件实例代码(2014-01-21)
- ·在apache 下建立高可扩展的web邮件系统实例(2014-01-21)
- ·php fsockopen邮箱发送实例代码(2014-01-22)
- ·PHPMailer邮件发送实例与问题总结(2014-01-25)
- ·php 中javascript调用js实例方法(2014-05-30)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)