Crossin的编程教室

标题: 43课查天气(1),尝试编写 [打印本页]

作者: 猪猪猪猪    时间: 2018-6-1 18:53
标题: 43课查天气(1),尝试编写
本帖最后由 猪猪猪猪 于 2018-6-1 19:31 编辑

使用mac os vim,py3
在网上查询了半天,不太理解json的使用方法,索性撇开json,仅使用urllib,写出来之后,发现获取的北京地区的代号是错误的?但是其他的一些地区是可以查询的,比如武汉,南京等,不知道是什么原因,希望能有大神解惑!
citynumget.py
  1. import urllib.request
  2. response = urllib.request.urlopen('http://m.weather.com.cn/data3/city.xml')
  3. html = response.read().decode()
  4. datas1 = html.split(',')
  5. city = []
  6. for data in datas1:
  7.     data = data.split('|')
  8.     city.append(data[0])

  9. city1 = []
  10. for i in city:
  11.     response = urllib.request.urlopen('http://m.weather.com.cn/data3/city%s.xml'%(i))
  12.     html = response.read().decode()
  13.     datas2 = html.split(',')
  14.     for data in datas2:
  15.         data = data.split('|')
  16.         city1.append(data[0])

  17. city2 = []
  18. for i in city1:
  19.     response = urllib.request.urlopen('http://m.weather.com.cn/data3/city%s.xml'%(i))
  20.     html = response.read().decode()
  21.     city2.append(html)

  22. city3 = ','.join(city2)
  23. citynum = open('citynum.txt','w')
  24. citynum.write(city3)
  25. citynum.close()
复制代码
查询天气.py
  1. import urllib.request

  2. f = open('citynum.txt')
  3. city = f.read()
  4. f.close()
  5. city1 = city.split(',')
  6. citynum = {}
  7. for i in city1:
  8.     data = i.split('|')
  9.     citynum[data[1]] = data[0]

  10. print('请输入要查询天气的城市:')
  11. city = input()
  12. response = urllib.request.urlopen('http://www.weather.com.cn/data/cityinfo/101%s.html'%(citynum[city]))
  13. html = response.read().decode()

  14. html = html.split('{')#乱想的笨办法,将读取的文本写入字典
  15. html = html[-1].split('}')
  16. html = html[0]
  17. html = html.split('"')
  18. html = ''.join(html)
  19. html = html.split(',')
  20. weather = {}
  21. for i in html:
  22.     i = i.split(':')
  23.     weather[i[0]] = i[1]

  24. print('%s当前天气为%s,气温为%s~%s'%(weather['city'],weather['weather'],weather['temp1'],weather['temp2']))
复制代码
PS:第一次写这么长的代码,第一次发帖,好激动

——————————————————————
补充:看完之后的课程之后发现原来抓数据的时候漏掉了一步。。。但是这样都还能查就比较稀奇了
作者: crossin先生    时间: 2018-6-2 00:17
北京应该是对的吧,至少之前是可以的。
但是确实有部分城市的代号不对

另外就是天气数据其实是不更新了,查天气帖子开头有说




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5