库中中国天气预报报

打造自己的天气预报之(六)——对数据库的操作 - 三思之旅 - ITeye技术网站
博客分类:
中,我实现了设置按钮的功能,其中涉及到了从数据库中读写数据。我使用的是SQLite数据库,这是一种轻量级的基于单一磁盘文件的关系数据库,不需要单独的服务器即可使用。从2.5版本开始,Python已经集成了SQLite模块(模块名:sqlite3),所以对于天气预报这种小型程序来说,用SQLite那可是相当方便。本文出自三思之旅博客,转载请注明出处。
本篇简单介绍一下Python如何操纵SQLite数据库。注意,我讲的重点是Python操纵SQLite,而不是讲数据库的。因为SQLite也是一种关系型数据,常用的SQL语句都支持,所以本文不再赘述。
Python操纵SQLite数据库,可以分为如下几步:
连接数据库
执行SQL命令
获取查询结果(仅查询需要)
提交当前事务(查询不需要)
关闭数据库连接
先说一下本程序用到的数据库。本人对SQL语句也不是很懂,所以程序中只是进行查询、增加条目、删除条目、更改条目的操作,没有建表、删表的操作,表是我事先通过图形界面的SQLite数据库浏览器建的。数据库中一共两个表————cityInfo和userInfo。cityInfo中存储的是全国各省市县区的信息,一共4个字段,依次是id(城市代码)、prov(省)、city(市)、zoon(县区);userInfo中存储的是用户信息,一共4个字段,依次是mail(邮箱地址)、city(城市代码)、main(是否主城市,1是0不是)、note(备注信息,即城市名称)。大家可以在下图中看到本程序所用数据库的结构。
然后我们举个例子,比如从数据库中查找主城市代码和增加一个新用户:本文出自三思之旅博客,转载请注明出处。
def getMainCityCode(self):
self.conn = sqlite.connect('data.db') #连接数据库data.db,如果不存在将会创建
self.curs = self.conn.cursor() #建立游标
query = 'SELECT city FROM userInfo WHERE main = 1' #SQL语句
self.curs.execute(query) #执行SQL语句
rows = self.curs.fetchall() #获取查询结果,是一个二维列表
return rows[0][0] #返回主城市代码
def addItem(self, table, values):
self.conn = sqlite.connect('data.db') #连接数据库data.db,如果不存在将会创建
self.curs = self.conn.cursor() #建立游标
query = 'INSERT INTO ' + table + ' VALUES (?,?,?,?)' #SQL语句
self.curs.execute(query, values) #执行SQL语句
mit() #提交事务,保存数据库
return True
通常情况下,SQL操作需要传入一些值,就像上述代码中第二个方法一样。这种情况下,不要使用Python的字符串操作把值组合进SQL语句,因为这样不安全,会使程序易于受到SQL注入攻击。更安全的做法是,使用参数替换。就像上述代码一样,每个值用一个问号代替,然后把真正的值(元组形式)作为execute()方法的第二个参数传入。注意此处,第二个参数一定是元组形式,即使只有一个值,也要以无组形式传入,这种情况下应该用小括号括住并且在值后加一个逗号,即(value,)这种形式。举例如下:
# Never do this -- insecure!
symbol = 'IBM'
c.execute("select * from stocks where symbol = '%s'" % symbol)
# Do this instead
t = (symbol,)
c.execute('select * from stocks where symbol=?', t)
# Larger example
for t in [('', 'BUY', 'IBM', ),
('', 'BUY', 'MSFT', ),
('', 'SELL', 'IBM', 500, 53.00),
c.execute('insert into stocks values (?,?,?,?,?)', t)
我为了使用方便,把这些对数据库的操作封装在MySearcher类中,代码很简单。本文出自三思之旅博客,转载请注明出处。
#! /usr/bin/env python
# coding=utf-8
import sqlite3 as sqlite
class MySearcher():
def __init__(self, database='data.db'):
self.database = database
self.conn = sqlite.connect(self.database)
self.curs = self.conn.cursor()
def addItem(self, table, values):
query = 'INSERT INTO ' + table + ' VALUES (?,?,?,?)'
self.curs.execute(query, values)
return True
def delItem(self, mail, city):
query = 'DELETE FROM userInfo WHERE mail=? AND city=?'
self.curs.execute(query, (mail, city))
return True
def searchItem(self, table, item, value):
if item == '':
query = 'SELECT * FROM ' + table
self.curs.execute(query)
query = 'SELECT * FROM ' + table + ' WHERE ' + item + ' =?'
self.curs.execute(query, (value,))
rows = self.curs.fetchall()
return rows
def getRowCount(self, table):
query = 'SELECT * FROM ' + table
self.curs.execute(query)
rowCount = len(self.curs.fetchall())
return rowCount
def listProvs(self):
query = 'SELECT DISTINCT prov FROM cityInfo ORDER BY id'
self.curs.execute(query)
rows = self.curs.fetchall()
result = []
for row in rows:
result.append(row[0])
return result
def listCityOfProv(self, prov=u'北京'):
query = 'SELECT DISTINCT city FROM cityInfo WHERE prov = ? ORDER BY id'
self.curs.execute(query, (prov,))
rows = self.curs.fetchall()
result = []
for row in rows:
result.append(row[0])
return result
def listZoonOfCity(self, prov=u'北京', city=u'北京'):
query = 'SELECT zoon FROM cityInfo WHERE prov = ? AND city = ? ORDER BY id'
self.curs.execute(query, (prov, city))
rows = self.curs.fetchall()
result = []
for row in rows:
result.append(row[0])
return result
def getCityCode(self, prov=u'北京', city=u'北京', zoon=u'北京'):
query = 'SELECT id FROM cityInfo WHERE prov=? AND city=? AND zoon = ?'
self.curs.execute(query, (prov, city, zoon))
rows = self.curs.fetchall()
return rows[0][0]
def getMainCityCode(self):
query = 'SELECT city FROM userInfo WHERE main = 1'
self.curs.execute(query)
rows = self.curs.fetchall()
return rows[0][0]
def setMainCity(self, mail, city):
query = 'UPDATE userInfo set main=? WHERE mail=? AND city=?'
self.curs.execute(query, (True, mail, city))
return True
def isMainCity(self, mail, city):
query = 'SELECT main FROM userInfo WHERE mail=? AND city=?'
self.curs.execute(query, (mail, city))
rows = self.curs.fetchall()
return rows[0][0]
def getUserInfo(self):
query = 'SELECT mail,city,note FROM userInfo'
self.curs.execute(query)
rows = self.curs.fetchall()
return rows
def clearMainCity(self):
query = 'UPDATE userInfo SET main=0 WHERE main=1'
self.curs.execute(query)
return True
def close(self):
self.conn.close()
if __name__ == '__main__':
mysch = MySearcher()
print mysch.listProvs()
print mysch.listCityOfProv(u'北京')
另外,我也把我建的数据库放出来,里面包含了我从中国天气网上提取的全国几千个城市的城市代码,提取这些信息也费了我不少功夫,大家可以直接拿来用。OK,本篇文章到此为止,欢迎大家继续关注。本文出自三思之旅博客,转载请注明出处。
描述: 程序中用到的数据库,含有全国上千城市代码
下载次数: 31
浏览: 25896 次
来自: 南京
浏览量:11184
好人一生平安
写的清楚明了,不错,
楼主,,还有这种天气预报的例子吗,,写得太好了。。。
楼主,好人。。
我按你说的做了,但是乱码了能指导一下吗天气预报中怎样看懂风向与风力的表示符号_中华文本库
第1页/共1页
天气预报中怎样看懂风向与风力的表示符号
由风矢表示,由风向秆和风羽组成。
风向秆: 指出风的业向,有8个方位。
风羽: 由3、4个短划和三角表示大风风力,垂直在风向杆末端右侧(北半球)
1--2级: 1 竖杠 1 横
3--4级: 1 竖杠 2 横
5--6级: 1 竖杠 3 横
7--8级: 1 竖杠 4 横
8级以上:1 竖杠 1 三角 像个小旗子
风力等级表
风级和符号 名称 风速(米)* 陆地物象 海面波浪 浪高(米)
0 无风 0.0-0.2 烟直上 平静 0.0
1 软风 0.3-1.5 烟示风向 微波峰无飞沫 0.1
2 轻风 1.6-3.3 感觉有风 小波峰未破碎 0.2
3 微风 3.4-5.4 旌旗展开 小波峰顶破裂 0.6
4 和风 5.5-7.9 吹起尘土 小浪白沫波峰 1.0
5 劲风 8.0-10.7 小树摇摆 中浪折沫峰群 2.0
6 强风 10.8-13.8 电线有声 大浪到个飞沫 3.0
7 疾风 13.9-17.1 步行困难 破峰白沫成条 4.0
8 大风 17.2-20.7 折毁树枝 浪长高有浪花 5.5
9 烈风 20.8-24.4 小损房屋 浪峰倒卷 7.0
10 狂风 24.5-28.4 拔起树木 海浪翻滚咆哮 9.0
11 暴风 28.5-32.6 损毁普遍 波峰全呈飞沫 11.5
12 飓风 32.7- 摧毁巨大 海浪滔天 14.0
第1页/共1页
寻找更多 ""用asp.net抓取网页上的天气预报(如新浪),然后把他保存到本地数据库-.NET技术/ASP.NET-asp.net-电脑编程网用asp.net抓取网页上的天气预报(如新浪),然后把他保存到本地数据库-.NET技术/ASP.NET作者:lonyjianhui 和相关&&用.net抓取网页上的天气预报(如新浪),然后把他保存到本地之前我想到一点思路:1,先抓取网页的源码;2,用正则过滤无用数据;3,把数据保存到。但是,我从第一步就卡住了,抓取到的都是乱码,然后正则又不知道该怎么用,最后数据也不知道如何保存。希望大家帮忙一下,或者给个思路让我先思考一下;又或者给点代码,让我学习一下。谢谢------回答---------------其他回答(15分)---------URL 是你要截取的网站,str 是编码,可以去它的网站上看,一般 GB2312 /UTF-8C# code
public static string Download(string URL, string str)
Stream strmPage =
StreamReader srPage =
string HTML =
HttpWebRequest wrqPage = (HttpWebRequest)WebRequest.Create(URL);//根据制定的URL字符构造一个网络请求
wrqPage.UserAgent = &Mozilla/4.0( MSIE 6.0; Windows NT 5.1)&;//设定UserAgent的属性
wrqPage.Method = &GET&;
WebResponse wrpPage = wrqPage.GetResponse();//获取网络相应
strmPage = wrpPage.GetResponseStream();//获取网络相应的数据流
//srPage = new StreamReader(strmPage, Encoding.GetEncoding(&gb2312&));//将获取的数据流构造为一个StreamReader,用来读取流的内容
srPage = new StreamReader(strmPage, System.Text.Encoding.GetEncoding(str));//将获取的数据流构造为一个StreamReader,用来读取流的内容
HTML = srPage.ReadToEnd(); //使用StreamReader读取到流的末尾,并将读取的内容存储到HTML变量中
strmPage.Close();
return HTML;
catch (Exception)
if (strmPage != null)
strmPage.Close();
return HTML;
------其他回答(15分)---------抓取页面不乱码C# code
/// &summary&
/// 抓取页面htm
/// &/summary&
/// &param name=&url&&抓取页面的url(http://......)&/param&
/// &returns&&/returns&
public static string get(string url)
string sRslt = &&;
WebResponse oWebRps =
WebRequest oWebRqst = WebRequest.Create(url);
oWebRqst.Timeout = 10000;
oWebRps = oWebRqst.GetResponse();
catch (WebException)
if (oWebRps != null)
//获取网页编码
string encod = oWebRps.ContentT
string re = @&[^\b]+?charset=(?&encoded&[\s\S]+)&;
Regex regex = new Regex(re, RegexOptions.IgnoreCase);
MatchCollection mc = regex.Matches(encod);
if (mc.Count &= 1)
encod = mc[0].Groups[&encoded&].V
regex = new Regex(@&\s&, RegexOptions.IgnoreCase);
encod = regex.Replace(encod, &&);
//读取页面超时,没有正常获得编码
encod = &utf-8&;
if (encod.Equals(&&))
encod = &utf-8&;
StreamReader oStreamRd = new StreamReader(oWebRps.GetResponseStream(), Encoding.GetEncoding(encod));
sRslt = oStreamRd.ReadToEnd();
catch (Exception)
oStreamRd.Close();
oWebRps.Close();
------其他回答(5分)---------引用 6 楼 c11_11_11 的回复:对的 直接找公布的webservies免费的有限制还是1楼的方法可以用------其他回答(5分)---------将gb2312改成utf-8相关资料:|||||||用asp.net抓取网页上的天气预报(如新浪),然后把他保存到本地数据库-.NET技术/ASP.NET来源网络,如有侵权请告知,即处理!编程Tags:                &                    知识点梳理
 由气象卫星观测到的地球上的云层覆盖和地表面特征的图像。各种不同尺度天气系统的云区和各种不同的地表特征,在这种图像上都有其特定的色调、范围大小和分布形式。利用卫星云图可以识别不同的天气系统,确定它们的位置,估计其强度和发展趋势,为天气分析和天气预报提供依据。在海洋、沙漠、高原等大片缺少气象观测台站的地区,卫星云图所提供的资料,弥补了常规探测资料的不足,这对提高预报准确率起了重要作用。 天气预报是气象工作者使用现代科学技术对未来某一地点地球大气层的状态进行预测,发布将要出现的天气状况,主要包括气温、阴天或晴天、降水的可能性、降水的强度、风力的大小、空气的能见度等。从史前人类就已经开始对天气进行预测来相应地安排其工作与生活(比如、军事行动等等)。现在的天气预报主要是使用收集大量的数据(气温、湿度、风向和风速、气压等等),然后使用目前对大气过程的认识(气象学)来确定未来空气变化。由于大气过程的混乱以及现在科学并没有最终透彻地了解大气过程,因此天气预报总是有一定的。天气预报是根据对卫星云图和天气图的分析,结合有关气象资料、地形和季节特点、群众经验等综合研究后作出的。如中国中央气象台的卫星云图,就是中国制造的“风云一号”气象卫星摄取的。利用卫星云图照片进行分析,能提高天气预报的准确率。天气预报就时效的长短通常分为三种:短期天气预报(2-3天)、中期天气预报(4-9天),长期天气预报(10-15天以上)。中央电视台每天播放的主要是短期天气预报。想一想:卫星云图上的绿蓝白各表示什么
整理教师:&&
举一反三(巩固练习,成绩显著提升,去)
根据问他()知识点分析,
试题“下列有关天气预报的说法正确的是”,相似的试题还有:
某中学地理兴趣小组的同学,分为两组进行课外活动.第一组测定该中学某一天的气温,图甲为该组一天中的4次观测记录;第二组模仿电视天气预报节目主持人播报天气状况,图乙是该组从气象部门获得的世界部分城市天气预报图.请你根据两小组获取的资料,完成下列各题.(1)该中学这一天的平均气温约为_____℃.(2)根据天气预报资料,开罗未来一天的天气状况是_____.(3)气候与天气是有区别的请你写出描述气候的词语或句子_____.
某中学地理兴趣小组的同学,分为两组进行课外活动.第一组测定该中学某一天的气温,图甲为该组一天中的4次观测记录;第二组模仿电视天气预报节目主持人播报天气状况,图乙是该组从气象部门获得的世界部分城市天气预报图.请你根据两小组获取的资料,完成下列各题.(1)该中学这一天的平均气温约为______℃.(2)根据天气预报资料,开罗未来一天的天气状况是______.(3)气候与天气是有区别的请你写出描述气候的词语或句子______.
某中学地理兴趣小组的同学,分为两组进行课外活动.第一组测定该中学某一天的气温,图甲为该组一天中的4次观测记录;第二组模仿电视天气预报节目主持人播报天气状况,图乙是该组从气象部门获得的世界部分城市天气预报图.请你根据两小组获取的资料,完成下列各题.(1)该中学这一天的平均气温约为______℃.(2)根据天气预报资料,开罗未来一天的天气状况是______.(3)气候与天气是有区别的请你写出描述气候的词语或句子______.中国政府网-法律法规
当前位置: >> 法律法规
     }

我要回帖

更多关于 中国气象网天气预报 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信