Python查询天气
输入要查询的城市名称,就可以快速显示天气与温度
本章主要用了中国天气网(www.weather.com.cn)提供的天气查询接口。
可以在浏览器里试着访问一下:http://www.weather.com.cn/data/cityinfo/101010100.html
实现思路:
- 获取编码
- 获取输入的城市
- 解析Json
- 拼接URL
5.输出结果
获取编码
获取所有省 / 直辖市的编号,如 “01 | 北京, 02 | 上海, 03 | 天津”
获取二级地区编号,如江苏是:city19.xml
- http://m.weather.com.cn/data3/city 二级编号. xml
获取三级编号,如南京是:city1901.xml
得到最终的三级编号之后,再加上中国 101 的前缀,就得到了城市代码,如南京市区就是 “101190101”
获取city编码
from urllib import request
def main():
url = 'http://m.weather.com.cn/data3/city.xml'
content = request.urlopen(url,timeout = 2).read()
content = content.decode("utf-8")
provinces = content.split(',')
print(provinces)
url1 = 'http://m.weather.com.cn/data3/city%s.xml'
result = 'city = { \n'
for p in provinces:
p_code = p.split('|')[0]
url2 = url1 % p_code
content2 = request.urlopen(url2,timeout = 20).read()
content2 = content2.decode("utf-8")
cites = content2.split(',')
for c in cites:
c_code = c.split('|')[0]
url3 = url1 % c_code
# print(url3)
content3 = request.urlopen(url3,timeout = 20).read()
content3 = content3.decode("utf-8")
# print(content3)北安
ccc = content3.split(',')
try:
for d in ccc:
d_pair = d.split('|')
d_code = d_pair[0]
name = d_pair[1]
url4 = url1 % d_code
content4 = request.urlopen(url4,timeout = 20).read()
content4 = content4.decode("utf-8")
ddd = content4.split('|')[1]
line = " '%s':'%s',\n" % (name,ddd)
# print(line)
result += line
print(name + ':'+ ddd)
except:
print("超时")
result += '}'
f = open('city.py','w')
f.write(result)
f.close()
if __name__ == '__main__':
main()
最后输出City.py文件
解析json
获取到的是Json编码
{
"weatherinfo": {
"city": "南京",
"cityid": "101190101",
"temp1": "37℃",
"temp2": "28℃",
"weather": "多云",
"img1": "d1.gif",
"img2": "n1.gif",
"ptime": "11:00"
}
}
完整代码
from urllib import request
from city import city
import chardet
import json
if __name__ == "__main__":
cityname = str(input('想查什么城市?\n'))
citycode = city.get(cityname)
# print(citycode)
if citycode:
try:
url = ('http://www.weather.com.cn/data/cityinfo/%s.html' % citycode)
content = request.urlopen(url).read()
content = content.decode("utf-8")
data = json.loads(content)
result = data['weatherinfo']
weather = ('%s\n %s ~ %s') % (result['weather'],result['temp1'],result['temp2'])
print(weather)
except:
print("查询失败")
else:
print("输入错误,没有该城市!")
本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。