php怎么抓取天气预报?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php怎么抓取天气预报?相关的知识,希望对你有一定的参考价值。
参考技术A可以借由php的api或者preg_match_all偷偷撷取去达成目的
这里给你一段我给台湾朋友有一段源码
<?phpheader(\\"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\\");
?>
首先
这里是读取资料的网址
上面的是台湾中央气象局
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周
// print_r($m2);//取得每日资料m2[0~6]
这里是取得每日的资料
preg_match_all('/src=[^>]*[^>](.*)/si',$m2[$i], $m5, PREG_SET_ORDER);//取得天气图档这里是取得天气的图档
$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;
这里是返回的网址,日期,标题,图档等等的资料
print_r($weather);
然后这里是显示出地区的一周天气预报
结论:就是如果你想从网站上面截取天气预报
在php可以是用preg_match_all(网页的表格table,表格的列数tr,表格的栏位td,或者更加广泛的标签div等等获取)
这里是天气插件.根据自己需要选择.
绝对能行. 参考技术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怎么抓取天气预报?的主要内容,如果未能解决你的问题,请参考以下文章