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

前言

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

(0)

相关推荐

  • PHP Ajax JavaScript Json获取天气信息实现代码

    要在自己的网站上添加一个天气预报功能,是一个很普通的需求,实现起来也不是很难.今天来介绍几个简单的方法. 使用第三方服务 有这样的一种简单的方式,借助http://www.tianqi.com/plugin/网上的天气服务,可以定制我们的显示形状,实现添加天气预报的功能. 下面给出一个简单的小例子: 复制代码 代码如下: <iframe width="420" scrolling="no" height="60" frameborder=&

  • PHP 获取指定地区的天气实例代码

    PHP 获取指定地区的天气 在开发网站的时候用到天气查询,由于是基于Wordpress的 所以有很多限制,先建一个[weather.PHP]的文件,然后看代码: <?php //获取天气 $url = 'http://m.weather.com.cn/data/'; $id = '101181101'; //焦作的代号 $data = file_get_contents($url . $id .'.html'); $obj=json_decode($data); echo $obj->weat

  • PHP微信开发之查询城市天气

    PHP微信查询城市天气,首先,你需要找到一个获取天气的API,此处,我用的是百度的apistore,申请和使用API的网址:http://apistore.baidu.com/apiworks/servicedetail/112.html 登录百度账号,并用手机发送请求获取apikey.有了apikey,可以按照它的示例来请求城市天气了.(可以按照城市中文名,拼音,城市编号等来查询) 你可以现在本地做测试,请求完成之后,再放到自己的域名空间的脚本里.  测试的脚本例如:(注意apikey填写自己

  • php使用百度天气接口示例

    注意地区要转码的百度ak申请地址:http://lbsyun.baidu.com/apiconsole/key 复制代码 代码如下: <?php $city="嘉兴";$content = file_get_contents("http://api.map.baidu.com/telematics/v3/weather?location=%E5%98%89%E5%85%B4&output=json&ak=5slgyqGDENN7Sy7pw29IUvrZ&

  • php微信开发之百度天气预报

    本文实例为大家分享了php微信百度天气预报的开发代码,供大家参考,具体内容如下 1.登录百度ak申请:http://lbsyun.baidu.com/apiconsole/key 2.实现天气信息功能 baiduWeather.php <?php /** * 使用百度天气预报接口获取城市天气信息案例实现 */ //获取城市天气信息 function getWeatherInfo($cityName){ if($cityName == "" || (strstr($cityName

  • php结合飞信 免费天气预报短信

    开始教你怎么弄 一.需要有一个PHP环境.为了图省事下载APMServ软件快速搭建PHP环境 二.下载天气预报短信通知PHP程序点这里下载代码 三.修改PHP程序配置 用记事本打开WeatherForecast.php文件 复制代码 代码如下: <? /** * 飞信通知天气预报 * 2009-4-23 */ //禁止执行时间限制 set_time_limit (0); //设置MB编码 mb_internal_encoding("GB2312"); /** * 采集新浪天气预报

  • PHP+AJAX无刷新实现返回天气预报数据

    用php来写一个天气预报的模块 天气数据是通过采集中国气象网站的.本来中国天气网站也给出了数据的API接口.以下是API的地址.返回的数据格式为json格式. 1. http://www.weather.com.cn/data/sk/101010100.html 2. http://www.weather.com.cn/data/cityinfo/101010100.html 3. http://m.weather.com.cn/data/101010100.html URL中的数字"10101

  • php实现的百度搜索某地天气的小偷代码

    例子,php百度天气小偷程序. 复制代码 代码如下: <?php//获取在百度里面搜索 xx(地名)天气 抓取的天气信息$url = "http://www.baidu.com/s?wd=%B1%B1%BE%A9%CC%EC%C6%F8"; //此为在百度里搜 北京天气 的返回地址$content = file_get_contents($url);preg_match_all('/<div id="weat">(.+?)<\/table&g

  • php采集自中央气象台范围覆盖全国的天气预报代码实例

    本文实例讲述了php采集自中央气象台范围覆盖全国的天气预报代码.分享给大家供大家参考.具体分析如下: 天气预报信息采集自中央气象台,信息准确,覆盖面广,代码简单,返回是json代码,可以用于客户端调用,也可以在服务器端处理后显示,笔者的wordpress天气预报插件就是使用的这段代码,需要注意的是,这段代码会在服务器产生缓存文件,需要在当前目录中新建data文件夹,保证文件夹可写. php天气预报代码如下: 复制代码 代码如下: /* 作者:    freemouse 主页:    www.cn

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

    前言 我们在写一个Web程序的时候,总会想着把自己的网站更美观一些,功能能更多一些,有时候写一些小的工具或者加上小的插件会让我们的站点更加完善.比如万年历功能,比如我们现在要讲的天气预报功能. 当然我们没法利用专业的卫星接受数据,所以我们的天气数据来自现有的天气预报网站.利用天气预报网站提供的数据服务,我们可以写一个PHP爬虫,然后动态采集我们所需要的数据,并且在目标站点更新数据的时候,我们的程序也能做到同步更新,自动地获取数据. 下面就介绍一下如何编写一个简单的PHP数据采集程序(PHP爬虫)

  • php采集中国代理服务器网的方法

    本文实例讲述了php采集中国代理服务器网的方法.分享给大家供大家参考.具体如下: <?php /** * 采集中国代理服务器网 最新列表 */ class proxy { /* 需采集列表 */ public $list; /* 代理列表 保存路径 */ public $save_path = 'proxy.txt'; /* 获取采集列表 */ function get_list($page) { $url = 'http://www.cnproxy.com/proxy(*).html'; //

  • java调用中国天气网api获得天气预报信息的方法

    本文实例讲述了java调用中国天气网api获得天气预报信息的方法.分享给大家供大家参考.具体实现方法如下: //以冰城哈尔滨为例通过中国天气api调用天气信息 private String getWeatherInfo2(){ StringBuilder info = new StringBuilder(); try { DefaultHttpClient httpclient = new DefaultHttpClient(); HttpGet httget = new HttpGet("ht

  • python 爬取天气网卫星图片

    项目地址: https://github.com/MrWayneLee/weather-demo 代码部分 下载生成文件功能 # 下载并生成文件 def downloadImg(imgDate, imgURLs, pathName): a,s,f = 0,0,0 timeStart = time.time() while a < len(imgURLs): req = requests.get(imgURLs[a]) imgName = str(imgURLs[a])[-13:-9] print

  • 基于Python爬虫采集天气网实时信息

    相信小伙伴们都知道今冬以来范围最广.持续时间最长.影响最重的一场低温雨雪冰冻天气过程正在进行中.预计,今天安徽.江苏.浙江.湖北.湖南等地有暴雪,局地大暴雪,新增积雪深度4-8厘米,局地可达10-20厘米.此外,贵州中东部.湖南中北部.湖北东南部.江西西北部有冻雨.言归正传,天气无时无刻都在陪伴着我们,今天小编带大家利用Python网络爬虫来实现天气情况的实时采集. 此次的目标网站是绿色呼吸网.绿色呼吸网站免费提供中国环境监测总站发布的PM2.5实时数据查询,更收集分析关于PM2.5有关的一切报

  • python解析中国天气网的天气数据

    使用方法:terminal中输入 复制代码 代码如下: python weather.py http://www.weather.com.cn/weather/101010100.shtml 北京6天的天气数据 json格式 复制代码 代码如下: #coding=utf-8  #weather.py  import urllib  import re  import simplejson  import sys if len(sys.argv) != 2:      print 'please

  • asp下以Json获取中国天气网天气的代码

    百度了一下,找了点别人的方法改进了一下. 获取天气网址:http://www.weather.com.cn/html/weather/101210701.shtml这里是温州的,当然其他城市自己搜索一下,换一下ID. 由于是写入cookies记录当天天气,所有需要在站点下浏览. js代码: 复制代码 代码如下: var Url=escape("http://m.weather.com.cn/data/101210701.html"); var COOKIE_info = "C

  • 中国学生网为您提供50M免费空间服务

    这里说明一下. 申请完后需要填写您的易趣帐号和密码才可以激活您的空间.如果没有易趣帐号可以到他们提示的地方去申请一下. 免费空间申请地址:http://web.6to23.com/

  • JS HTML5 音乐天气播放器(Ajax获取天气信息)

    晚上要考软件工程,实在不想复习.写个播放器吧,这个只是个用来学习的小Demo,众多不完善之处,下面贴出源代码,如果要转载,请加上版权声明 PS:因为Ajax涉及到跨域获取天气信息,有两个版本,一个是直接跨域,IE10支持,其他的浏览器要改配置.另一个是服务器端的weather.php,获取天气信息返回json. weather.php就不写了,里面的对应路径存放对应的文件 演示地址: http://569375.ichengyun.net/fm/ 实现功能:音乐播放,进度调节(滑动模块),音量条

  • Python实战之异步获取中国天气信息

    目录 前言 目标 请求格式 请求限制 requests非异步获取 异步获取 系统上限 编码 前言 本来是想要更新scrapy的,但是怎么说呢,这玩意不难,看着官方文档,基本上就能做,主要是前面的如果你的爬虫基础不好的话,这个scrapy你也玩不好,而且对于大部分的人来说安装scrapy可能都是个问题,因为有一些历史遗留的问题,毕竟是从python2过来的老框架.当然还有个原因,我要做的东西,用不上scrapy,能够用上scrapy如果只是做爬虫,那必然是分布式爬虫,但是我这里要做的可能只是一个客

随机推荐