免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 9410 | 回复: 15
打印 上一主题 下一主题

很长很长的天气预报 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-21 20:18 |只看该作者 |倒序浏览
有多长呢?5天。代码有点长,请指教。明天再贴一个很短很短的实时天气预报的。

  1. #! /usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. import urllib,re,unicodedata,sys

  4. def str_width(text):
  5.         s = 0
  6.         for ch in text:
  7.                 if isinstance(ch, unicode):
  8.                         if unicodedata.east_asian_width(ch) in ('F', 'W', 'A'):
  9.                                 s += 2
  10.                         else:
  11.                                 s += 1
  12.                 else:
  13.                         s += 1
  14.         return s

  15. def deltag(arg):
  16.         return re.sub('<.+?>','',arg)

  17. city={"北京":"101010100","朝阳":"101010300","顺义":"101010400","怀柔":"101010500",
  18. "通州":"101010600","昌平":"101010700","延庆":"101010800","丰台":"101010900",
  19. "石景山":"101011000","大兴":"101011100","房山":"101011200","密云":"101011300",
  20. "门头沟":"101011400","平谷":"101011500","八达岭":"101011600","佛爷顶":"101011700",
  21. "汤河口":"101011800","密云上甸子":"101011900","斋堂":"101012000","霞云岭":"101012100",
  22. "北京城区":"101012200","海淀":"101010200","天津":"101030100","宝坻":"101030300",
  23. "东丽":"101030400","西青":"101030500","北辰":"101030600","蓟县":"101031400",
  24. "汉沽":"101030800","静海":"101030900","津南":"101031000","塘沽":"101031100",
  25. "大港":"101031200","武清":"101030200","宁河":"101030700","上海":"101020100",
  26. "宝山":"101020300","嘉定":"101020500","南汇":"101020600","浦东":"101021300",
  27. "青浦":"101020800","松江":"101020900","奉贤":"101021000","崇明":"101021100",
  28. "徐家汇":"101021200","闵行":"101020200","金山":"101020700","石家庄":"101090101",
  29. "张家口":"101090301","唐山":"101090501","秦皇岛":"101091101","沧州":"101090701",
  30. "衡水":"101090801","邢台":"101090901","邯郸":"101091001","保定":"101090201",
  31. "廊坊":"101090601","郑州":"101180101","新乡":"101180301","许昌":"101180401",
  32. "平顶山":"101180501","信阳":"101180601","南阳":"101180701","开封":"101180801",
  33. "洛阳":"101180901","商丘":"101181001","焦作":"101181101","鹤壁":"101181201",
  34. "濮阳":"101181301","周口":"101181401","漯河":"101181501","驻马店":"101181601",
  35. "三门峡":"101181701","济源":"101181801","安阳":"101180201","合肥":"101220101",
  36. "芜湖":"101220301","淮南":"101220401","马鞍山":"101220501","安庆":"101220601",
  37. "宿州":"101220701","阜阳":"101220801","亳州":"101220901","黄山":"101221001",
  38. "滁州":"101221101","淮北":"101221201","铜陵":"101221301","宣城":"101221401",
  39. "六安":"101221501","巢湖":"101221601","池州":"101221701","蚌埠":"101220201",
  40. "杭州":"101210101","舟山":"101211101","湖州":"101210201","嘉兴":"101210301",
  41. "金华":"101210901","绍兴":"101210501","台州":"101210601","温州":"101210701",
  42. "丽水":"101210801","衢州":"101211001","宁波":"101210401","重庆":"101040100",
  43. "合川":"101040300","南川":"101040400","江津":"101040500","万盛":"101040600",
  44. "渝北":"101040700","北碚":"101040800","巴南":"101040900","长寿":"101041000",
  45. "黔江":"101041100","万州天城":"101041200","万州龙宝":"101041300","涪陵":"101041400",
  46. "开县":"101041500","城口":"101041600","云阳":"101041700","巫溪":"101041800",
  47. "奉节":"101041900","巫山":"101042000","潼南":"101042100","垫江":"101042200",
  48. "梁平":"101042300","忠县":"101042400","石柱":"101042500","大足":"101042600",
  49. "荣昌":"101042700","铜梁":"101042800","璧山":"101042900","丰都":"101043000",
  50. "武隆":"101043100","彭水":"101043200","綦江":"101043300","酉阳":"101043400",
  51. "秀山":"101043600","沙坪坝":"101043700","永川":"101040200","福州":"101230101",
  52. "泉州":"101230501","漳州":"101230601","龙岩":"101230701","晋江":"101230509",
  53. "南平":"101230901","厦门":"101230201","宁德":"101230301","莆田":"101230401",
  54. "三明":"101230801","兰州":"101160101","平凉":"101160301","庆阳":"101160401",
  55. "武威":"101160501","金昌":"101160601","嘉峪关":"101161401","酒泉":"101160801",
  56. "天水":"101160901","武都":"101161001","临夏":"101161101","合作":"101161201",
  57. "白银":"101161301","定西":"101160201","张掖":"101160701","广州":"101280101",
  58. "惠州":"101280301","梅州":"101280401","汕头":"101280501","深圳":"101280601",
  59. "珠海":"101280701","佛山":"101280800","肇庆":"101280901","湛江":"101281001",
  60. "江门":"101281101","河源":"101281201","清远":"101281301","云浮":"101281401",
  61. "潮州":"101281501","东莞":"101281601","中山":"101281701","阳江":"101281801",
  62. "揭阳":"101281901","茂名":"101282001","汕尾":"101282101","韶关":"101280201",
  63. "南宁":"101300101","柳州":"101300301","来宾":"101300401","桂林":"101300501",
  64. "梧州":"101300601","防城港":"101301401","贵港":"101300801","玉林":"101300901",
  65. "百色":"101301001","钦州":"101301101","河池":"101301201","北海":"101301301",
  66. "崇左":"101300201","贺州":"101300701","贵阳":"101260101","安顺":"101260301",
  67. "都匀":"101260401","兴义":"101260906","铜仁":"101260601","毕节":"101260701",
  68. "六盘水":"101260801","遵义":"101260201","凯里":"101260501","昆明":"101290101",
  69. "红河":"101290301","文山":"101290601","玉溪":"101290701","楚雄":"101290801",
  70. "普洱":"101290901","昭通":"101291001","临沧":"101291101","怒江":"101291201",
  71. "香格里拉":"101291301","丽江":"101291401","德宏":"101291501","景洪":"101291601",
  72. "大理":"101290201","曲靖":"101290401","保山":"101290501","呼和浩特":"101080101",
  73. "乌海":"101080301","集宁":"101080401","通辽":"101080501","阿拉善左旗":"101081201",
  74. "鄂尔多斯":"101080701","临河":"101080801","锡林浩特":"101080901","呼伦贝尔":"101081000",
  75. "乌兰浩特":"101081101","包头":"101080201","赤峰":"101080601","南昌":"101240101",
  76. "上饶":"101240301","抚州":"101240401","宜春":"101240501","鹰潭":"101241101",
  77. "赣州":"101240701","景德镇":"101240801","萍乡":"101240901","新余":"101241001",
  78. "九江":"101240201","吉安":"101240601","武汉":"101200101","黄冈":"101200501",
  79. "荆州":"101200801","宜昌":"101200901","恩施":"101201001","十堰":"101201101",
  80. "神农架":"101201201","随州":"101201301","荆门":"101201401","天门":"101201501",
  81. "仙桃":"101201601","潜江":"101201701","襄樊":"101200201","鄂州":"101200301",
  82. "孝感":"101200401","黄石":"101200601","咸宁":"101200701","成都":"101270101",
  83. "自贡":"101270301","绵阳":"101270401","南充":"101270501","达州":"101270601",
  84. "遂宁":"101270701","广安":"101270801","巴中":"101270901","泸州":"101271001",
  85. "宜宾":"101271101","内江":"101271201","资阳":"101271301","乐山":"101271401",
  86. "眉山":"101271501","凉山":"101271601","雅安":"101271701","甘孜":"101271801",
  87. "阿坝":"101271901","德阳":"101272001","广元":"101272101","攀枝花":"101270201",
  88. "银川":"101170101","中卫":"101170501","固原":"101170401","石嘴山":"101170201",
  89. "吴忠":"101170301","西宁":"101150101","黄南":"101150301","海北":"101150801",
  90. "果洛":"101150501","玉树":"101150601","海西":"101150701","海东":"101150201",
  91. "海南":"101150401","济南":"101120101","潍坊":"101120601","临沂":"101120901",
  92. "菏泽":"101121001","滨州":"101121101","东营":"101121201","威海":"101121301",
  93. "枣庄":"101121401","日照":"101121501","莱芜":"101121601","聊城":"101121701",
  94. "青岛":"101120201","淄博":"101120301","德州":"101120401","烟台":"101120501",
  95. "济宁":"101120701","泰安":"101120801","西安":"101110101","延安":"101110300",
  96. "榆林":"101110401","铜川":"101111001","商洛":"101110601","安康":"101110701",
  97. "汉中":"101110801","宝鸡":"101110901","咸阳":"101110200","渭南":"101110501",
  98. "太原":"101100101","临汾":"101100701","运城":"101100801","朔州":"101100901",
  99. "忻州":"101101001","长治":"101100501","大同":"101100201","阳泉":"101100301",
  100. "晋中":"101100401","晋城":"101100601","吕梁":"101101100","乌鲁木齐":"101130101",
  101. "石河子":"101130301","昌吉":"101130401","吐鲁番":"101130501","库尔勒":"101130601",
  102. "阿拉尔":"101130701","阿克苏":"101130801","喀什":"101130901","伊宁":"101131001",
  103. "塔城":"101131101","哈密":"101131201","和田":"101131301","阿勒泰":"101131401",
  104. "阿图什":"101131501","博乐":"101131601","克拉玛依":"101130201","拉萨":"101140101",
  105. "山南":"101140301","阿里":"101140701","昌都":"101140501","那曲":"101140601",
  106. "日喀则":"101140201","林芝":"101140401","台北县":"101340101","高雄":"101340201",
  107. "台中":"101340401","海口":"101310101","三亚":"101310201","东方":"101310202",
  108. "临高":"101310203","澄迈":"101310204","儋州":"101310205","昌江":"101310206",
  109. "白沙":"101310207","琼中":"101310208","定安":"101310209","屯昌":"101310210",
  110. "琼海":"101310211","文昌":"101310212","保亭":"101310214","万宁":"101310215",
  111. "陵水":"101310216","西沙":"101310217","南沙岛":"101310220","乐东":"101310221",
  112. "五指山":"101310222","琼山":"101310102","长沙":"101250101","株洲":"101250301",
  113. "衡阳":"101250401","郴州":"101250501","常德":"101250601","益阳":"101250700",
  114. "娄底":"101250801","邵阳":"101250901","岳阳":"101251001","张家界":"101251101",
  115. "怀化":"101251201","黔阳":"101251301","永州":"101251401","吉首":"101251501",
  116. "湘潭":"101250201","南京":"101190101","镇江":"101190301","苏州":"101190401",
  117. "南通":"101190501","扬州":"101190601","宿迁":"101191301","徐州":"101190801",
  118. "淮安":"101190901","连云港":"101191001","常州":"101191101","泰州":"101191201",
  119. "无锡":"101190201","盐城":"101190701","哈尔滨":"101050101","牡丹江":"101050301",
  120. "佳木斯":"101050401","绥化":"101050501","黑河":"101050601","双鸭山":"101051301",
  121. "伊春":"101050801","大庆":"101050901","七台河":"101051002","鸡西":"101051101",
  122. "鹤岗":"101051201","齐齐哈尔":"101050201","大兴安岭":"101050701","长春":"101060101",
  123. "延吉":"101060301","四平":"101060401","白山":"101060901","白城":"101060601",
  124. "辽源":"101060701","松原":"101060801","吉林":"101060201","通化":"101060501",
  125. "沈阳":"101070101","鞍山":"101070301","抚顺":"101070401","本溪":"101070501",
  126. "丹东":"101070601","葫芦岛":"101071401","营口":"101070801","阜新":"101070901",
  127. "辽阳":"101071001","铁岭":"101071101","朝阳":"101071201","盘锦":"101071301",
  128. "大连":"101070201","锦州":"101070701","澳门":"101330101","香港":"101320101","新界":"101320103"}

  129. def printweather(city_code):
  130.         response = urllib.urlopen("http://www.weather.com.cn/html/weather/"+city_code+".shtml")
  131.         result=response.read().decode('utf-8').encode("gbk")

  132.         forecast=re.findall(r'<div class="fut_weather" id="dd_0">(.*)<div class="box_contentl scene_weather">',result,re.S)
  133.         #print forecast[0]
  134.         todayweather=re.findall(r'<div class="box_contenttodayinwea" id="c_1_.+?>(.+?)</div>',result,re.S)
  135.         nowweather=re.findall('<p>.+?</p>',todayweather[0],re.S)
  136.         now=re.findall('<em|.+?>(.+?)</em>',nowweather[0])
  137.        
  138.         print '*'*78
  139.         print '天  气:%s\n温  度:%s\n风  力:%s\n' %(deltag(now[0]),deltag(now[1]),deltag(now[2]))
  140.         day=re.findall(r'<h3>([0-9].*)</h3>',forecast[0])

  141.         temp00=re.findall(r'<h4 class="temp00_dn">(.*)</h4>',forecast[0])
  142.         temp01=re.findall(r'<h4 class="temp01_dn">(.*)</h4>',forecast[0])
  143.         temp02=re.findall(r'<h4 class="temp02_dn">(.*)</h4>',forecast[0])
  144.         temp03=re.findall(r'<h4 class="temp03_dn"><a name="sk".*>(.*)</a></h4>',forecast[0])
  145.        
  146.         print '*='*39
  147.         print " "*30,"未来五天天气情况"
  148.         print '--'*39
  149.         for i in range(len(day)):
  150.                 print ("%s" % day[i])," "*(11-str_width(day[i])),
  151.         print "\n",
  152.         for i in range(len(day)):
  153.                 print ("%s" % deltag(temp00[i]))," "*(11-str_width(deltag(temp00[i]))),
  154.         print "\n",
  155.         for i in range(len(day)):
  156.                 print ("%s" % deltag(temp01[i]))," "*(11-str_width(deltag(temp01[i]))),
  157.         print "\n",
  158.         for i in range(len(day)):
  159.                 print ("%s" % deltag(temp02[i]))," "*(11-str_width(deltag(temp02[i]))),
  160.         print "\n",
  161.         for i in range(len(day)):
  162.                 print ("%s" % temp03[i])," "*(11-str_width(temp03[i])),
  163.         print "\n",
  164.         print '*='*39       

  165. if __name__=="__main__":
  166.         if len(sys.argv)==1:
  167.                 citycode="长沙"
  168.         else:
  169.                 citycode=sys.argv[1]
  170.                 if citycode not in city:
  171.                         print "没有这个城市"
  172.                         sys.exit(0)
  173.         print '正在获取天气信息,请稍后...'
  174.         print citycode,'今日天气实况:'
  175.         printweather(city[citycode])

复制代码

ttt.GIF (16.6 KB, 下载次数: 48)

ttt.GIF

评分

参与人数 1可用积分 +5 收起 理由
smallfish_xy + 5 原创内容

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2009-08-21 23:22 |只看该作者
赞一个

论坛徽章:
0
3 [报告]
发表于 2009-08-24 08:56 |只看该作者
跟我抓的是一个地方的,偶是把城市和对应ID存到数据库表里去了,哈哈。

论坛徽章:
0
4 [报告]
发表于 2009-08-24 17:01 |只看该作者
我复制粘贴后,执行出来的中文显示是乱码,文件已是UTF8格式了。

论坛徽章:
0
5 [报告]
发表于 2009-08-24 19:19 |只看该作者
原帖由 sandermansxj 于 2009-8-24 17:01 发表
我复制粘贴后,执行出来的中文显示是乱码,文件已是UTF8格式了。



你的系统是Linux?

把这一句后面的解码去掉就行了。
result=response.read().decode('utf-8').encode("gbk")

改成:
result=response.read()

论坛徽章:
0
6 [报告]
发表于 2009-08-24 19:25 |只看该作者
原帖由 smallfish_xy 于 2009-8-24 08:56 发表
跟我抓的是一个地方的,偶是把城市和对应ID存到数据库表里去了,哈哈。



斑竹怎么搞的,分享一下?

论坛徽章:
0
7 [报告]
发表于 2009-08-24 22:06 |只看该作者
严重支持下

论坛徽章:
0
8 [报告]
发表于 2009-08-25 09:40 |只看该作者
原帖由 two 于 2009-8-24 19:19 发表



你的系统是Linux?

把这一句后面的解码去掉就行了。
result=response.read().decode('utf-8').encode("gbk"

改成:
result=response.read()



我的系统是 Windows XP的
你说的这个方法我试了,我试了后,发现显示 全部都是乱码了

原先的只是部分乱码,见附图!


LZ能分享一下你的源文件吧,不知道是不是文件格式的问题。

论坛徽章:
0
9 [报告]
发表于 2009-08-25 10:14 |只看该作者

回复 #8 sandermansxj 的帖子

windows系统啊,那就不要改代码了,
把源文件的编码从utf-8换成gbk就可以了。

论坛徽章:
0
10 [报告]
发表于 2009-08-25 15:08 |只看该作者

回复 #9 two 的帖子

问题解决了,还是文件格式的问题,不应该存成utf-8格式的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP