这里我们借助中国天气网的三个接口,通过http get方式获取数据
获取省和直辖市的编号
http://m.weather.com.cn/data5/city.xml
例如
获取相应的二级城市编号
http://m.weather.com.cn/data5/city‘ + [省或直辖市编号] + ‘.xml
获取相应的地区编号
http://m.weather.com.cn/data5/city‘ + [二级城市编号]+ ‘.xml
最后将‘ 101‘ + [地区编号] 得到的就是可供查询的地区编号
查询相应地区的天气
http://www.weather.com.cn/data/cityinfo/[可供查询的地区编号].html
例如
希望能够输入城市就查询该城市或地区的天气,那么首先要获取完整的地区编号,这里通过get_city.py将所有地名对应的地区编号获取并写入到一个city.py文件中,并设置地名为键,对应的编号为值的dictionary结构。之后查询天气的模块导入city模块,并执行查询,完整代码如下
# -*- coding: utf-8 -*-
import os
import urllib
#根据url得到html代码
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
#讲字符串分割后整理为编号和对应城市的dictionary
def getDictionary(str):
str_split = str.split(',')
dics = {}
for each in str_split:
tmp = each.split('|')
dics[tmp[0]] = tmp[1]
return dics
#得到编号和对应的省或直辖市dictionary
def getProvience(url):
res = getHtml(url)
pro_dic = getDictionary(res)
return pro_dic
#得到编号和对应的二级城市的dictionary
def getCity(url):
res = getHtml(url)
city_dic = getDictionary(res)
return city_dic
#得到编号和对应的区域的dictionary
def getField(url):
res = getHtml(url)
field_dic = getDictionary(res)
return field_dic
if __name__ == '__main__':
#打开文件
city_code_file = open('city.py', 'w')
city_code_file.write('# -*- coding: utf-8 -*-\n')
city_code_file.write('city = {}\n')
print '获取省以及直辖市编号'
province_url = 'http://m.weather.com.cn/data5/city.xml'
pro_dic = getProvience(province_url)
#获取每个省的城市编号
print '获取二级区域编号'
for pro in pro_dic:
city_url = 'http://m.weather.com.cn/data5/city' + pro + '.xml'
city_dic = getCity(city_url)
#获取每个城市的地区编号
for city in city_dic:
field_url = 'http://m.weather.com.cn/data5/city' + city + '.xml'
field_dic = getField(field_url)
#对于每一个编号和对应的地区存入dictionary
for field in field_dic:
city_code_file.write('city[\'' + field_dic[field] + '\'] = ' + '101' + str(field) + '\n')
print 'city[\'' + field_dic[field].decode('utf-8') + '\'] = ' + '101' + str(field)
#关闭文件
city_code_file.close()
print '获取完成'
查询天气
# -*- coding: utf-8 -*-
import get_city
import json
import city
field_name = raw_input('哪里的天气?')
field_no = city.city.get(field_name)
if field_no:
url = 'http://www.weather.com.cn/data/cityinfo/%s.html' % field_no
html = get_city.getHtml(url)
weather_dic = json.loads(html)
weather_info = weather_dic.get('weatherinfo')
print weather_info['weather'] + ' ' + weather_info['temp2'] + '~' + weather_info['temp1']
else:
print '没有这个地名的天气信息'
原文地址:http://blog.csdn.net/aspnet_lyc/article/details/40261831