设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【Python 第46课】 查天气(4)

  [复制链接]

0

主题

0

好友

16

积分

新手上路

Rank: 1

楼主
发表于 2018-3-11 16:47:26 |显示全部楼层
  1. import urllib.request
  2. import json


  3. url1 = 'http://m.weather.com.cn/data3/city.xml'
  4. content1 = urllib.request.urlopen(url1).read()
  5. print(content1)
  6. data1 = bytes.decode(content1)
  7. povinces = data1.split(',')
复制代码
(。・∀・)ノ゙嗨,老师,我这里有两个问题:现在print(content1)输出的结果是“b'00|\xe7\x9c\x81,01|\xe5\x8c\x97\xe4\xba\xac,02|\xe4\xb8\x8a\xe6\xb5\xb7,”这种形式的,直接用上节课中的json.loads()函数会出错,是怎么回事呢?
还有另一个问题:因为province的那一行程序会报错,所以我把content1改成了byte形式的data1,对后续有没有影响呢,还是说本身就存在会出现这种错误的可能?
纯小白准备靠老师这门课程进行入门学习,经常在错误上卡住,请教
回复

使用道具 举报

0

主题

0

好友

16

积分

新手上路

Rank: 1

沙发
发表于 2018-3-19 20:45:36 |显示全部楼层
感觉py3在学的时候老是会一些意外的问题...运行之后会显示错误:
provinces = content1.split(',')
TypeError: a bytes-like object is required, not 'str'
请问我应该在哪里改正呢?
  1. # -*- coding: gbk -*-
  2. import urllib.request
  3. import json


  4. url1 = 'http://m.weather.com.cn/data3/city.xml'
  5. content1 = urllib.request.urlopen(url1).read()
  6. #content1 = content1.decode('utf8')
  7. #print(content1)
  8. provinces = content1.split(',')
  9. #print(provinces)
  10. result = 'city = {\n'

  11. url = 'http://m.weather.com.cn/data3/city%s.xml'
  12. for p in provinces:
  13.     p_code = p.split('|')[0]
  14.     url2 = url %p_code
  15.     content2 = urllib.request.urlopen(url2).read()
  16.     cities = content2.split(',')
  17.     for c in cities:
  18.         c_code = c.split('|')[0]
  19.         url3 = url % c_code
  20.         content3 = urllib.request.urlopen(url3).read()
  21.         districts = content3.split(',')
  22.         for d in districts:
  23.             d_pair = d.split('|')
  24.             d_code = d_pair[0]
  25.             name = d_pair[1]
  26.             url4 = url % d_code
  27.             content4 = urllib.urlopen(url4).read()
  28.             code = content4.split('|')[1]
  29.             line = "   '%s': '%s',\n" % (name, code)
  30.             result += line
  31.             print(name + ':' + code)
  32. result += '}'
  33. f = open('city.py','w')
  34. f.write(result)
  35. f.close()

复制代码
回复

使用道具 举报

0

主题

0

好友

16

积分

新手上路

Rank: 1

板凳
发表于 2018-3-19 20:49:04 |显示全部楼层
shenwang886 发表于 2018-3-19 20:45
感觉py3在学的时候老是会一些意外的问题...运行之后会显示错误:
provinces = content1.split(',')
TypeErr ...

啊,已经解决了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-6-1 21:30 , Processed in 0.023076 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部