首页 > 代码库 > python 查天气

python 查天气

这里我们借助中国天气网的三个接口,通过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 '获取完成'

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



查询天气

# -*- 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 '没有这个地名的天气信息'



python 查天气