设为首页收藏本站

Crossin的编程教室

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

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

  [复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

171#
发表于 2018-3-12 16:40:36 |只看该作者
shenwang886 发表于 2018-3-11 16:47
(。・∀・)ノ゙嗨,老师,我这里有两个问题:现在print(content1)输出的结果是“b'00|\xe7\x9c\x81,01|\x ...

content1 = content1.decode('utf8') 转成 str
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

16

积分

新手上路

Rank: 1

172#
发表于 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

173#
发表于 2018-3-19 20:49:04 |只看该作者
shenwang886 发表于 2018-3-19 20:45
感觉py3在学的时候老是会一些意外的问题...运行之后会显示错误:
provinces = content1.split(',')
TypeErr ...

啊,已经解决了!
回复

使用道具 举报

0

主题

0

好友

14

积分

新手上路

Rank: 1

174#
发表于 2018-5-7 20:27:42 |只看该作者
import urllib.request
import json
url1 = 'http://m.weather.com.cn/data3/city.xml'
content1 = urllib.request.urlopen(url1).read()
provinces=content1.split(','.encode(encoding="utf-8"))
result='city={\n'
url = 'http://m.weather.com.cn/data3/city%s.xml'
for p in provinces:
   p_code = p.split('|'.encode(encoding="utf-8"))[0]
   url2 = url % p_code
   content2 = urllib.request.urlopen(url2).read()
   cities = content2.split(','.encode(encoding="utf-8"))
   for c in cities[:3]:
       c_code = c.split('|'.encode(encoding="utf-8"))[0]
       url3 = url % c_code
       content3 = urllib.request.urlopen(url3).read()
       districts = content3.split(','.encode(encoding="utf-8"))
       for d in districts:
           d_pair = d.split('|'.encode(encoding="utf-8"))
           d_code = d_pair[0]
           name = d_pair[1]
           url4 = url % d_code
           content4 = urllib.request.urlopen(url4).read()
           code = content4.split('|'.encode(encoding="utf-8"))[1]
           line = "    '%s': '%s',\n" % (name, code)
           result+=line
           print('%s:%s'%(name,code))
result+='}'
f=open('C:\\Users\\42253\\Desktop\\test\\cityname.txt','w')
f.write(result)
f.close()

对于 name = d_pair[1]总是报list index out of range的错误,print(len(d_pair))显示list长度只有1,请问这是怎么回事?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

175#
发表于 2018-5-7 23:56:02 |只看该作者
wmy190317 发表于 2018-5-7 20:27
import urllib.request
import json
url1 = 'http://m.weather.com.cn/data3/city.xml'

有些返回值本身有问题
输出来看看,有问题的跳过
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

75

积分

注册会员

Rank: 2

176#
发表于 2018-5-22 19:37:22 |只看该作者
wmy190317 发表于 2018-5-7 20:27
import urllib.request
import json
url1 = 'http://m.weather.com.cn/data3/city.xml'

我也是报这个错误,你这个问题有解决吗?
回复

使用道具 举报

1

主题

0

好友

75

积分

注册会员

Rank: 2

177#
发表于 2018-5-22 19:42:22 |只看该作者
crossin先生 发表于 2018-5-7 23:56
有些返回值本身有问题
输出来看看,有问题的跳过

老师,如何跳过去执行,使用try...except吗,这样跳过去输出的是个空的文件“city={}”
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

178#
发表于 2018-5-22 22:48:18 |只看该作者
loveting0jie 发表于 2018-5-22 19:42
老师,如何跳过去执行,使用try...except吗,这样跳过去输出的是个空的文件“city={}” ...

只有少数城市的代码有问题,用try把具体的那些忽略掉,其他对的还是要保留的
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

75

积分

注册会员

Rank: 2

179#
发表于 2018-5-23 09:18:17 |只看该作者
crossin先生 发表于 2018-5-22 22:48
只有少数城市的代码有问题,用try把具体的那些忽略掉,其他对的还是要保留的 ...

恩,谢谢老师,问题处理掉了,我从网上获取的字节码没有解码,运行到name = d_pair[1]这一句就会报list index out of range的错,转换从UTF-8就没有报错了
回复

使用道具 举报

0

主题

0

好友

24

积分

新手上路

Rank: 1

180#
发表于 2018-8-30 10:47:41 |只看该作者
Crossin,你好。
我尝试将这个网页上的记录城市编码的数据(这个网页上共有349个城市)做整理,当作练习。
https://blog.csdn.net/hello_haozi/article/details/7564223
发现了一个问题。我原来的思路是将这些城市和编码先保存到一个字典中,然后转而保存到文件中。但每次的结果都是不完整的。
(尝试不保存在文件中,用print来检查也是不完整的)
之后,就改了一个思路。把城市和编码都保存进一个字符串,再保存到文件中。结果就完整了。
这是因为字典的内容有数量限制吗?我用的是2.7。
谢谢。
回复

使用道具 举报

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

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

GMT+8, 2024-5-3 11:38 , Processed in 0.026820 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部