python 查天气

来源:互联网 发布:淘宝宝贝图片制作教程 编辑:程序博客网 时间:2024/06/07 16:34

这里我们借助中国天气网的三个接口,通过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 osimport urllib#根据url得到html代码def getHtml(url):    page = urllib.urlopen(url)    html = page.read()    return html#讲字符串分割后整理为编号和对应城市的dictionarydef getDictionary(str):    str_split = str.split(',')    dics = {}    for each in str_split:        tmp = each.split('|')        dics[tmp[0]] = tmp[1]    return dics#得到编号和对应的省或直辖市dictionarydef getProvience(url):    res = getHtml(url)    pro_dic = getDictionary(res)    return pro_dic#得到编号和对应的二级城市的dictionarydef getCity(url):    res = getHtml(url)    city_dic = getDictionary(res)    return city_dic#得到编号和对应的区域的dictionarydef getField(url):    res = getHtml(url)    field_dic = getDictionary(res)    return field_dicif __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 '获取完成'

执行后将创建一个city.py文件,并按照python语法写入,使其查询时可直接作为模块导入,效果如下



查询天气

# -*- coding: utf-8 -*-import get_cityimport jsonimport cityfield_name = raw_input('哪里的天气?')field_no = city.city.get(field_name)if field_no:url = 'http://www.weather.com.cn/data/cityinfo/%s.html' % field_nohtml = 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 '没有这个地名的天气信息'



0 0
原创粉丝点击