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

时间: 2024-08-30 05:38:14

python 查天气的相关文章

使用python写天气预告

先去YY天气注册一个账号,然后就能用API了 http://www.yytianqi.com/ # encoding=utf-8import urllib.requestimport jsonimport collectionscityid = 'http://api.yytianqi.com/observe?key=API的key&city=城市ID' response = urllib.request.urlopen(cityid) //打开网页html = response.read().

python获取天气状况并以邮件的形式发到目的邮箱

python爬取天气情况 下面为示例代码: from urllib.request import urlopen from bs4 import BeautifulSoup from urllib.error import HTTPError import smtplib from email.mime.text import MIMEText from email.utils import formataddr import time """爬虫程序是一个需要后期投入很大维

利用python监控天气

需求: 从天气网站抓取天气,在每天6点,检查当天是否会下雨.如果下雨,邮件提醒带伞. 代码: [[email protected] ~]# cat weather.py #!/usr/bin/python # -*- coding: UTF-8 -*- import requests,bs4,smtplib def sendMail(body):     smtp_server = 'smtp.126.com'     from_mail = '[email protected]'     ma

python获取天气+email通知

信息抓取来源:http://www.tianqi.com/(天气网 ) 邮件服务器(发送):126邮箱 邮件服务器(接收):QQ邮箱 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*-  import smtplib import urllib,urllib2 import re #定义函数,发送邮件 def sendMail(body):     smtp_server = 'smtp.126.com'     from_mail = '[em

python查漏补缺之list列表的remove

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">        今天碰到一个坑,python的列表问题,错误往往出在你最熟悉的地方,特别是小地方,问题:我要列出目录下所有的下一级文件和子目录(只包含下一级目录而不包括目录的目录及文件这种情况),然后只获取当前子目录..问题描述很清楚,很轻易的就写了个函数,不就是os.listdir(p

Python Flask 天气查询

一直觉得自己的博客太简单了,今天想加点功能上去,说干就干,准备加个最常用的,天气预报功能. 看了几个例子,觉得也不是很难,网上找个接口就是了,不过,这百度的apistore里面...死活不让我获取手机验证码,所以转向JUHE里面去,还送500次的免费次数,绝对够用了 进入正题 首先,这个功能的主旨是:通过其他网站提供的api接口取回数据,一般是JSON格式的,然后自己渲染在前端页面上 直接看代码,这个代码是测试用例,最后加到网站以后还需要自行修改,不用class,直接添加函数就好. import

Python查缺补漏之动态实例属性

--看到哪里,想到哪里,记到哪里 很多时候,很多人学python的时候,会忽略的东西很多,大多数都盯着能"出货"就行,但是通常在读别人的代码的时候发现,看不懂...一方面是自己的代码技巧和经验不足:另一方面就是自己掌握的东西不全面,而这些往往是基础的东西,还不算高大上的东西.. 第一:动态实例属性 Python的类,面向对象的东西和其他语言不太一样,比如实例的属性是可以动态分配的,本来没有的,可以自己加上,就算类中没有定义,也可以用,挺方便的,但是建议能一次行定义完整最好,下面举个粒子

python 获取天气信息

[说明]接口为聚合数据接口.API使用说明: 实现代码: import requests,json def main(): #参数 farmat=1 cityname = input("请输入你想查询的城市天气:") key='621043608cb9e7f7f485461ef9e5adef' get_weather(farmat,cityname,key) def get_weather(format,cityname,key): url='http://v.juhe.cn/weat

python查漏补缺 --- 模块及异常

1.方法定义好之后,如,def test(x) : ,此时将方法名赋值给一个新的变量,那么该变量等同于方法,可以具备test方法内部的全部功能2.导包的时候,可以使用as关键字在不同的名称下导入模块或对象,这主要是在模块或对象具有冗长或混淆的名称时使用3.python中主要有三种模块 a.自定义的类和方法 b.外部源安装的(第三方) c.python预安装的(也称作标准库,python具有广泛的标准库是它作为语言的主要优点之一,这些标准库有些是python写的,有些是C语言写的,多数都可以在所有