php怎么抓取天气预报?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php怎么抓取天气预报?相关的知识,希望对你有一定的参考价值。

参考技术A

可以借由php的api或者preg_match_all偷偷撷取去达成目的

这里给你一段我给台湾朋友有一段源码

<?php

header(\\"Content-Type: text/html; charset=utf-8\\");
function getWeather($city)

$toURL = \\"
$city.htm\\";
$post = array();
$ch = curl_init();
$options = array(
CURLOPT_REFERER=>'',
CURLOPT_URL=>$toURL,
CURLOPT_VERBOSE=>0,
CURLOPT_RETURNTRANSFER=>true,
CURLOPT_USERAGENT=>\\"Mozilla/4.0 (compatible;)\\",
CURLOPT_POST=>true,
CURLOPT_POSTFIELDS=>http_build_query($post),
);
curl_setopt_array($ch, $options);

$result = curl_exec($ch); 
curl_close($ch);
//连接中央气象局
echo '<pre>';
preg_match_all('/<table class=\\"FcstBoxTable01\\" [^>]*[^>]*>(.*)<\\/div>/si',$result, $matches, PREG_SET_ORDER);

preg_match_all('/<td nowrap=\\"nowrap\\" [^>]*[^>]*>(.*)<\\/td>/si',$matches[0][1], $m1, PREG_SET_ORDER);

$m2 = explode('</td>',$m1[0][1]);
// print_r($m2);//取得每日资料m2[0~6]

$weather = array();
for($i=0;$i<=6;$i++)

preg_match_all('/src=[^>]*[^>](.*)/si',$m2[$i], $m5, PREG_SET_ORDER);//取得天气图档
$m6 = explode('\\"',$m5[0][0]);
$wi='
($m6[1],'\\.\\./\\.\\./');
$wtitle = $m6[3];
     print_r($wtitle);
$weather[$i]['date'] = date(\\"m-d\\", mktime(0, 0, 0, date(\\"m\\"), date(\\"d\\")+$i,date(\\"Y\\")));
$weather[$i]['temperature'] = trim(strip_tags($m2[$i]));
$weather[$i]['title'] = $wtitle;
$weather[$i]['img'] = $wi;


return($weather);



  $weather=getWeather(\\"Taipei_City\\") ;   
  print_r($weather);
  

// header(\\"Location:loc.php\\");
?>

首先

$toURL = \\"http://www.cwb.gov.tw/V7/forecast/taiwan/inc/city/$city.htm\\";

这里是读取资料的网址

上面的是台湾中央气象局

preg_match_all('/<table class=\\"FcstBoxTable01\\" [^>]*[^>]*>(.*)<\\/div>/si',$result, $matches, PREG_SET_ORDER);

preg_match_all('/<td nowrap=\\"nowrap\\" [^>]*[^>]*>(.*)<\\/td>/si',$matches[0][1], $m1, PREG_SET_ORDER);

这里是截取台湾中央气象局网页信息table class=\\"FcstBoxTable01\\" [^>]*[^>]*>(.*)<\\/div>的资料以及<td nowrap=\\"nowrap\\" [^>]*[^>]*>(.*)<\\/td>的资料分别是1天跟1周

$m2 = explode('</td>',$m1[0][1]);
// print_r($m2);//取得每日资料m2[0~6]

这里是取得每日的资料

preg_match_all('/src=[^>]*[^>](.*)/si',$m2[$i], $m5, PREG_SET_ORDER);//取得天气图档

这里是取得天气的图档

$m6 = explode('\\"',$m5[0][0]);
$wi='
($m6[1],'\\.\\./\\.\\./');
$wtitle = $m6[3];
     print_r($wtitle);
$weather[$i]['date'] = date(\\"m-d\\", mktime(0, 0, 0, date(\\"m\\"), date(\\"d\\")+$i,date(\\"Y\\")));
$weather[$i]['temperature'] = trim(strip_tags($m2[$i]));
$weather[$i]['title'] = $wtitle;
$weather[$i]['img'] = $wi;

这里是返回的网址,日期,标题,图档等等的资料

  $weather=getWeather(\\"Taipei_City\\") ;   
  print_r($weather);

然后这里是显示出地区的一周天气预报


结论:就是如果你想从网站上面截取天气预报

在php可以是用preg_match_all(网页的表格table,表格的列数tr,表格的栏位td,或者更加广泛的标签div等等获取)

参考技术B http://service.weather.com.cn/plugin/index.shtml
这里是天气插件.根据自己需要选择.
绝对能行.
参考技术C http://www.weather.com.cn/
去这个网站,上面提供你天气预报的链接,很不错。你在自己的网页上写个框架就可以了,很简单。
参考技术D 给你两个看下
http://hi.baidu.com/fanglor/blog/item/b752368b613c14dafd1f10b1.html

http://blog.csdn.net/tatoo108/archive/2009/08/29/4493263.aspx本回答被提问者采纳
第5个回答  2009-11-11 用小偷程序啊,php100网站上面有这个教程,自己看看吧,挺简单的

python怎么自动抓取网页上每日天气预报

参考技术A 使用到了urllib库和bs4。bs4提供了专门针对html的解析功能,比用RE方便许多。
# coding : UTF-8import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )from bs4 import BeautifulSoupimport csvimport urllibdef get_html(url):
html = urllib.urlopen(url) return html.read()def get_data(html_text):
final = []
bs = BeautifulSoup(html_text, "html.parser")
body = bs.body
data = body.find('div', 'id': '7d')
ul = data.find('ul')
li = ul.find_all('li') for day in li:
temp = []
date = day.find('h1').string
temp.append(date)
inf = day.find_all('p')
temp.append(inf[0].string,) if inf[1].find('span') is None:
temperature_highest = None
else:
temperature_highest = inf[1].find('span').string
temperature_highest = temperature_highest.replace('C', '')
temperature_lowest = inf[1].find('i').string
temperature_lowest = temperature_lowest.replace('C', '')
temp.append(temperature_highest)
temp.append(temperature_lowest)
final.append(temp) return finaldef write_data(data, name):
file_name = name with open(file_name, 'a') as f:
f_csv = csv.writer(f)
f_csv.writerows(data)if __name__ == '__main__':
html_doc = get_html('http://www.weather.com.cn/weather/101190401.shtml')
result = get_data(html_doc)
write_data(result, 'weather.csv') print result12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152

运行结果保存在csv文件中,如下:
28日(今天),小雨,,13℃29日(明天),小雨转阴,15℃,12℃30日(后天),多云,19℃,14℃31日(周一),小雨,16℃,14℃1日(周二),阴转多云,16℃,10℃2日(周三),多云转晴,17℃,10℃3日(周四),多云转晴,18℃,11℃1234567

以上是关于php怎么抓取天气预报?的主要内容,如果未能解决你的问题,请参考以下文章

php 抓取天气情况 www.weather.com.cn

用html语言制作个网站天气预报复杂不?要怎么做?

php抓取页面的几种方式

python爬取天气预报怎么合并两个网址的天气预报

php怎么解析天气预报api返回的数据

Python爬虫编程思想(156):使用Scrapy抓取天气预报数据