有多长呢?5天。代码有点长,请指教。明天再贴一个很短很短的实时天气预报的。
- #! /usr/bin/python
- # -*- coding: utf-8 -*-
- import urllib,re,unicodedata,sys
- def str_width(text):
- s = 0
- for ch in text:
- if isinstance(ch, unicode):
- if unicodedata.east_asian_width(ch) in ('F', 'W', 'A'):
- s += 2
- else:
- s += 1
- else:
- s += 1
- return s
- def deltag(arg):
- return re.sub('<.+?>','',arg)
- city={"北京":"101010100","朝阳":"101010300","顺义":"101010400","怀柔":"101010500",
- "通州":"101010600","昌平":"101010700","延庆":"101010800","丰台":"101010900",
- "石景山":"101011000","大兴":"101011100","房山":"101011200","密云":"101011300",
- "门头沟":"101011400","平谷":"101011500","八达岭":"101011600","佛爷顶":"101011700",
- "汤河口":"101011800","密云上甸子":"101011900","斋堂":"101012000","霞云岭":"101012100",
- "北京城区":"101012200","海淀":"101010200","天津":"101030100","宝坻":"101030300",
- "东丽":"101030400","西青":"101030500","北辰":"101030600","蓟县":"101031400",
- "汉沽":"101030800","静海":"101030900","津南":"101031000","塘沽":"101031100",
- "大港":"101031200","武清":"101030200","宁河":"101030700","上海":"101020100",
- "宝山":"101020300","嘉定":"101020500","南汇":"101020600","浦东":"101021300",
- "青浦":"101020800","松江":"101020900","奉贤":"101021000","崇明":"101021100",
- "徐家汇":"101021200","闵行":"101020200","金山":"101020700","石家庄":"101090101",
- "张家口":"101090301","唐山":"101090501","秦皇岛":"101091101","沧州":"101090701",
- "衡水":"101090801","邢台":"101090901","邯郸":"101091001","保定":"101090201",
- "廊坊":"101090601","郑州":"101180101","新乡":"101180301","许昌":"101180401",
- "平顶山":"101180501","信阳":"101180601","南阳":"101180701","开封":"101180801",
- "洛阳":"101180901","商丘":"101181001","焦作":"101181101","鹤壁":"101181201",
- "濮阳":"101181301","周口":"101181401","漯河":"101181501","驻马店":"101181601",
- "三门峡":"101181701","济源":"101181801","安阳":"101180201","合肥":"101220101",
- "芜湖":"101220301","淮南":"101220401","马鞍山":"101220501","安庆":"101220601",
- "宿州":"101220701","阜阳":"101220801","亳州":"101220901","黄山":"101221001",
- "滁州":"101221101","淮北":"101221201","铜陵":"101221301","宣城":"101221401",
- "六安":"101221501","巢湖":"101221601","池州":"101221701","蚌埠":"101220201",
- "杭州":"101210101","舟山":"101211101","湖州":"101210201","嘉兴":"101210301",
- "金华":"101210901","绍兴":"101210501","台州":"101210601","温州":"101210701",
- "丽水":"101210801","衢州":"101211001","宁波":"101210401","重庆":"101040100",
- "合川":"101040300","南川":"101040400","江津":"101040500","万盛":"101040600",
- "渝北":"101040700","北碚":"101040800","巴南":"101040900","长寿":"101041000",
- "黔江":"101041100","万州天城":"101041200","万州龙宝":"101041300","涪陵":"101041400",
- "开县":"101041500","城口":"101041600","云阳":"101041700","巫溪":"101041800",
- "奉节":"101041900","巫山":"101042000","潼南":"101042100","垫江":"101042200",
- "梁平":"101042300","忠县":"101042400","石柱":"101042500","大足":"101042600",
- "荣昌":"101042700","铜梁":"101042800","璧山":"101042900","丰都":"101043000",
- "武隆":"101043100","彭水":"101043200","綦江":"101043300","酉阳":"101043400",
- "秀山":"101043600","沙坪坝":"101043700","永川":"101040200","福州":"101230101",
- "泉州":"101230501","漳州":"101230601","龙岩":"101230701","晋江":"101230509",
- "南平":"101230901","厦门":"101230201","宁德":"101230301","莆田":"101230401",
- "三明":"101230801","兰州":"101160101","平凉":"101160301","庆阳":"101160401",
- "武威":"101160501","金昌":"101160601","嘉峪关":"101161401","酒泉":"101160801",
- "天水":"101160901","武都":"101161001","临夏":"101161101","合作":"101161201",
- "白银":"101161301","定西":"101160201","张掖":"101160701","广州":"101280101",
- "惠州":"101280301","梅州":"101280401","汕头":"101280501","深圳":"101280601",
- "珠海":"101280701","佛山":"101280800","肇庆":"101280901","湛江":"101281001",
- "江门":"101281101","河源":"101281201","清远":"101281301","云浮":"101281401",
- "潮州":"101281501","东莞":"101281601","中山":"101281701","阳江":"101281801",
- "揭阳":"101281901","茂名":"101282001","汕尾":"101282101","韶关":"101280201",
- "南宁":"101300101","柳州":"101300301","来宾":"101300401","桂林":"101300501",
- "梧州":"101300601","防城港":"101301401","贵港":"101300801","玉林":"101300901",
- "百色":"101301001","钦州":"101301101","河池":"101301201","北海":"101301301",
- "崇左":"101300201","贺州":"101300701","贵阳":"101260101","安顺":"101260301",
- "都匀":"101260401","兴义":"101260906","铜仁":"101260601","毕节":"101260701",
- "六盘水":"101260801","遵义":"101260201","凯里":"101260501","昆明":"101290101",
- "红河":"101290301","文山":"101290601","玉溪":"101290701","楚雄":"101290801",
- "普洱":"101290901","昭通":"101291001","临沧":"101291101","怒江":"101291201",
- "香格里拉":"101291301","丽江":"101291401","德宏":"101291501","景洪":"101291601",
- "大理":"101290201","曲靖":"101290401","保山":"101290501","呼和浩特":"101080101",
- "乌海":"101080301","集宁":"101080401","通辽":"101080501","阿拉善左旗":"101081201",
- "鄂尔多斯":"101080701","临河":"101080801","锡林浩特":"101080901","呼伦贝尔":"101081000",
- "乌兰浩特":"101081101","包头":"101080201","赤峰":"101080601","南昌":"101240101",
- "上饶":"101240301","抚州":"101240401","宜春":"101240501","鹰潭":"101241101",
- "赣州":"101240701","景德镇":"101240801","萍乡":"101240901","新余":"101241001",
- "九江":"101240201","吉安":"101240601","武汉":"101200101","黄冈":"101200501",
- "荆州":"101200801","宜昌":"101200901","恩施":"101201001","十堰":"101201101",
- "神农架":"101201201","随州":"101201301","荆门":"101201401","天门":"101201501",
- "仙桃":"101201601","潜江":"101201701","襄樊":"101200201","鄂州":"101200301",
- "孝感":"101200401","黄石":"101200601","咸宁":"101200701","成都":"101270101",
- "自贡":"101270301","绵阳":"101270401","南充":"101270501","达州":"101270601",
- "遂宁":"101270701","广安":"101270801","巴中":"101270901","泸州":"101271001",
- "宜宾":"101271101","内江":"101271201","资阳":"101271301","乐山":"101271401",
- "眉山":"101271501","凉山":"101271601","雅安":"101271701","甘孜":"101271801",
- "阿坝":"101271901","德阳":"101272001","广元":"101272101","攀枝花":"101270201",
- "银川":"101170101","中卫":"101170501","固原":"101170401","石嘴山":"101170201",
- "吴忠":"101170301","西宁":"101150101","黄南":"101150301","海北":"101150801",
- "果洛":"101150501","玉树":"101150601","海西":"101150701","海东":"101150201",
- "海南":"101150401","济南":"101120101","潍坊":"101120601","临沂":"101120901",
- "菏泽":"101121001","滨州":"101121101","东营":"101121201","威海":"101121301",
- "枣庄":"101121401","日照":"101121501","莱芜":"101121601","聊城":"101121701",
- "青岛":"101120201","淄博":"101120301","德州":"101120401","烟台":"101120501",
- "济宁":"101120701","泰安":"101120801","西安":"101110101","延安":"101110300",
- "榆林":"101110401","铜川":"101111001","商洛":"101110601","安康":"101110701",
- "汉中":"101110801","宝鸡":"101110901","咸阳":"101110200","渭南":"101110501",
- "太原":"101100101","临汾":"101100701","运城":"101100801","朔州":"101100901",
- "忻州":"101101001","长治":"101100501","大同":"101100201","阳泉":"101100301",
- "晋中":"101100401","晋城":"101100601","吕梁":"101101100","乌鲁木齐":"101130101",
- "石河子":"101130301","昌吉":"101130401","吐鲁番":"101130501","库尔勒":"101130601",
- "阿拉尔":"101130701","阿克苏":"101130801","喀什":"101130901","伊宁":"101131001",
- "塔城":"101131101","哈密":"101131201","和田":"101131301","阿勒泰":"101131401",
- "阿图什":"101131501","博乐":"101131601","克拉玛依":"101130201","拉萨":"101140101",
- "山南":"101140301","阿里":"101140701","昌都":"101140501","那曲":"101140601",
- "日喀则":"101140201","林芝":"101140401","台北县":"101340101","高雄":"101340201",
- "台中":"101340401","海口":"101310101","三亚":"101310201","东方":"101310202",
- "临高":"101310203","澄迈":"101310204","儋州":"101310205","昌江":"101310206",
- "白沙":"101310207","琼中":"101310208","定安":"101310209","屯昌":"101310210",
- "琼海":"101310211","文昌":"101310212","保亭":"101310214","万宁":"101310215",
- "陵水":"101310216","西沙":"101310217","南沙岛":"101310220","乐东":"101310221",
- "五指山":"101310222","琼山":"101310102","长沙":"101250101","株洲":"101250301",
- "衡阳":"101250401","郴州":"101250501","常德":"101250601","益阳":"101250700",
- "娄底":"101250801","邵阳":"101250901","岳阳":"101251001","张家界":"101251101",
- "怀化":"101251201","黔阳":"101251301","永州":"101251401","吉首":"101251501",
- "湘潭":"101250201","南京":"101190101","镇江":"101190301","苏州":"101190401",
- "南通":"101190501","扬州":"101190601","宿迁":"101191301","徐州":"101190801",
- "淮安":"101190901","连云港":"101191001","常州":"101191101","泰州":"101191201",
- "无锡":"101190201","盐城":"101190701","哈尔滨":"101050101","牡丹江":"101050301",
- "佳木斯":"101050401","绥化":"101050501","黑河":"101050601","双鸭山":"101051301",
- "伊春":"101050801","大庆":"101050901","七台河":"101051002","鸡西":"101051101",
- "鹤岗":"101051201","齐齐哈尔":"101050201","大兴安岭":"101050701","长春":"101060101",
- "延吉":"101060301","四平":"101060401","白山":"101060901","白城":"101060601",
- "辽源":"101060701","松原":"101060801","吉林":"101060201","通化":"101060501",
- "沈阳":"101070101","鞍山":"101070301","抚顺":"101070401","本溪":"101070501",
- "丹东":"101070601","葫芦岛":"101071401","营口":"101070801","阜新":"101070901",
- "辽阳":"101071001","铁岭":"101071101","朝阳":"101071201","盘锦":"101071301",
- "大连":"101070201","锦州":"101070701","澳门":"101330101","香港":"101320101","新界":"101320103"}
- def printweather(city_code):
- response = urllib.urlopen("http://www.weather.com.cn/html/weather/"+city_code+".shtml")
- result=response.read().decode('utf-8').encode("gbk")
- forecast=re.findall(r'<div class="fut_weather" id="dd_0">(.*)<div class="box_contentl scene_weather">',result,re.S)
- #print forecast[0]
- todayweather=re.findall(r'<div class="box_contenttodayinwea" id="c_1_.+?>(.+?)</div>',result,re.S)
- nowweather=re.findall('<p>.+?</p>',todayweather[0],re.S)
- now=re.findall('<em|.+?>(.+?)</em>',nowweather[0])
-
- print '*'*78
- print '天 气:%s\n温 度:%s\n风 力:%s\n' %(deltag(now[0]),deltag(now[1]),deltag(now[2]))
- day=re.findall(r'<h3>([0-9].*)</h3>',forecast[0])
- temp00=re.findall(r'<h4 class="temp00_dn">(.*)</h4>',forecast[0])
- temp01=re.findall(r'<h4 class="temp01_dn">(.*)</h4>',forecast[0])
- temp02=re.findall(r'<h4 class="temp02_dn">(.*)</h4>',forecast[0])
- temp03=re.findall(r'<h4 class="temp03_dn"><a name="sk".*>(.*)</a></h4>',forecast[0])
-
- print '*='*39
- print " "*30,"未来五天天气情况"
- print '--'*39
- for i in range(len(day)):
- print ("%s" % day[i])," "*(11-str_width(day[i])),
- print "\n",
- for i in range(len(day)):
- print ("%s" % deltag(temp00[i]))," "*(11-str_width(deltag(temp00[i]))),
- print "\n",
- for i in range(len(day)):
- print ("%s" % deltag(temp01[i]))," "*(11-str_width(deltag(temp01[i]))),
- print "\n",
- for i in range(len(day)):
- print ("%s" % deltag(temp02[i]))," "*(11-str_width(deltag(temp02[i]))),
- print "\n",
- for i in range(len(day)):
- print ("%s" % temp03[i])," "*(11-str_width(temp03[i])),
- print "\n",
- print '*='*39
- if __name__=="__main__":
- if len(sys.argv)==1:
- citycode="长沙"
- else:
- citycode=sys.argv[1]
- if citycode not in city:
- print "没有这个城市"
- sys.exit(0)
- print '正在获取天气信息,请稍后...'
- print citycode,'今日天气实况:'
- printweather(city[citycode])
复制代码 |