Crossin的编程教室

标题: 【Python 第44课】 查天气(2) [打印本页]

作者: crossin先生    时间: 2013-7-23 21:33
标题: 【Python 第44课】 查天气(2)
python 查天气系列:
【Python 第43课】 查天气(1) http://bbs.crossincode.com/forum.php?mod=viewthread&tid=8
【Python 第44课】 查天气(2) http://bbs.crossincode.com/forum.php?mod=viewthread&tid=9
【Python 第45课】 查天气(3) http://bbs.crossincode.com/forum.php?mod=viewthread&tid=12
【Python 第46课】 查天气(4) http://bbs.crossincode.com/forum.php?mod=viewthread&tid=42

先来看python中的urllib2,这是python中一个用来获取网络资源的模块。我们平常上网,在浏览器地址栏中输入一个网址,浏览器根据这个网址拿到一些内容,然后展现在页面上,这大约就是浏览网页的过程。类似的,urllib2会跟据你提供的网址,请求对应的内容。

打开一个链接和打开一个文件有点像:
  1. import urllib2
  2. web = urllib2.urlopen('http://www.baidu.com')
  3. content = web.read()
  4. print content
复制代码
我们引入urllib2的模块,用其中的urlopen方法打开百度,然后用read方法把其中的内容读取到一个变量中并输出。运行后,你会看到控制台中输出了一堆看不懂的代码文字。这段代码中有html,有css,还有javascript。我们在浏览器中看到的网页大部分就是由这些代码所组成。如果你把content保存到一个以“.html”结尾的文件中(保存文件的方法前面已经说过很多),再打开这个html文件,就会看到“百度的首页”,只是这个首页在你的电脑上,所以你无法进行搜索。

回到我们的查天气程序,我们要向中国天气网发一个查询天气的请求。昨天说了,如何获取查询的url是个问题。先说简单的办法,用我提供的城市代码列表city.py。

city.py这个文件里有一个叫做city的字典,它里面的key是城市的名称,value是对应的城市代码。不用把它copy到自己的程序中,只要放在和你的代码同一路径下,用
  1. from city import city
复制代码
就可以引入city这个字典。这里相当于用了一个自定义的模块,前一个“city”是模块名,也就是py文件的名称,后一个“city”是模块中变量的名称。

构造我们需要的url:
  1. cityname = raw_input('你想查哪个城市的天气?\n')
  2. citycode = city.get(cityname)
  3. if citycode:
  4.    url = 'http://www.weather.com.cn/data/cityinfo/%s.html' % citycode
  5.    content = urllib2.urlopen(url).read()
复制代码
为了防止你输入列表中没有的城市,所以用了if判断citycode是否存在。

运行一下看看能不能得到结果。如果提示编码的错误,试试在文件最开始加上:
# -*- coding: utf-8 -*-

44weather.png

可以看到,已经拿到了json格式的天气信息。下一课再来处理它。

#==== Crossin的编程教室 ====#
微信ID:crossincode
QQ群:312723402

面向零基础初学者的编程课
每天5分钟,轻松学编程



作者: feicien    时间: 2013-7-24 09:03
  1. import urllib.request
  2. from city import city

  3. exit=False

  4. while not exit:
  5.     cityname=input("你想查询哪个城市的天气?输入q退出\n")
  6.     if cityname=="q" or cityname=="Q":
  7.         print("退出!")
  8.         exit=True
  9.     else:
  10.         citycode=city.get(cityname)
  11.         if citycode:
  12.             url=("http://www.weather.com.cn/data/cityinfo/%s.html"%citycode)
  13.             request=urllib.request.Request(url)
  14.             response=urllib.request.urlopen(request)
  15.             content=response.read().decode("utf-8")
  16.             print(content)
复制代码

作者: feicien    时间: 2013-7-24 09:07
feicien 发表于 2013-7-24 09:03

我下载的是python3.3
发现语法与python2.7有很大区别,这是我在python3.3下写的代码
加了一个while循环,下面是运行的结果:
  1. Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:55:48) [MSC v.1600 32 bit (Intel)] on win32
  2. Type "copyright", "credits" or "license()" for more information.
  3. >>> ================================ RESTART ================================
  4. >>>
  5. 你想查询哪个城市的天气?输入q退出
  6. 北京
  7. {"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"36℃","temp2":"23℃","weather":"晴","img1":"d0.gif","img2":"n0.gif","ptime":"08:00"}}
  8. 你想查询哪个城市的天气?输入q退出
  9. 天津
  10. {"weatherinfo":{"city":"天津","cityid":"101030100","temp1":"36℃","temp2":"26℃","weather":"晴转多云","img1":"d0.gif","img2":"n1.gif","ptime":"08:00"}}
  11. 你想查询哪个城市的天气?输入q退出
  12. 上海、
  13. 你想查询哪个城市的天气?输入q退出
  14. 上海
  15. {"weatherinfo":{"city":"上海","cityid":"101020100","temp1":"39℃","temp2":"30℃","weather":"晴转多云","img1":"d0.gif","img2":"n1.gif","ptime":"08:00"}}
  16. 你想查询哪个城市的天气?输入q退出
  17. 杭州
  18. {"weatherinfo":{"city":"杭州","cityid":"101210101","temp1":"39℃","temp2":"29℃","weather":"晴","img1":"d0.gif","img2":"n0.gif","ptime":"08:00"}}
  19. 你想查询哪个城市的天气?输入q退出
  20. Q
  21. 退出!
  22. >>>
复制代码

作者: crossin先生    时间: 2013-7-24 10:27
feicien 发表于 2013-7-24 09:03

很好啊
python 3 的同学看过来!
作者: qinng    时间: 2013-7-24 23:28
在mac下使用报错:
Traceback (most recent call last):
  File "weather.py", line 5, in <module>
    from city import city
  File "/Users/qinng/Code/Python/city.py", line 2
SyntaxError: Non-ASCII character '\xe5' in file /Users/qinng/Code/Python/city.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details

在city.py文件前边也加一个 # -*- coding: UTF-8 -*-  就OK了。

作者: kingson    时间: 2013-7-25 15:16
很不错哦
作者: grdzyz    时间: 2013-7-27 22:25
下面的截图是什么软件上编写的?
作者: grdzyz    时间: 2013-7-30 00:20
对于citycode = city.get(cityname)这一行代码,既然city是字典,为什么不能写citycode = city[cityname]这种方式呢?后一种程序会报错。。
作者: crossin先生    时间: 2013-8-5 16:24
grdzyz 发表于 2013-7-30 00:20
对于citycode = city.get(cityname)这一行代码,既然city是字典,为什么不能写citycode = city[cityname]这 ...

是可以的,但如果这个cityname的key在字典里找不到,就会报错。
作者: 小坏    时间: 2013-8-8 17:34
编码问题解决分享:
我用win7的,照编码写的出了问题,返回的citycode都是None。后在群里童鞋指导下,把city.py的开头utf-8改成cp936,这样两个py文件的开头都是cp936,就成功运行了。
作者: jako    时间: 2013-8-17 23:55
在ubuntu虚拟机和win7都试了,都不行,怎么回事呢?

win.PNG (105.24 KB, 下载次数: 627)

win.PNG

ubuntu.PNG (55.09 KB, 下载次数: 609)

ubuntu.PNG


作者: crossin先生    时间: 2013-8-18 11:57
jako 发表于 2013-8-17 23:55
在ubuntu虚拟机和win7都试了,都不行,怎么回事呢?

请求的地址有问题
把url输出来看看呢
作者: jako    时间: 2013-8-18 16:09
crossin先生 发表于 2013-8-18 11:57
请求的地址有问题
把url输出来看看呢

我试了下 把输出来的url  复制到浏览器上,结果打不开,我觉得应该是站点的问题,在43课的那几个网站也打不开
作者: crossin先生    时间: 2013-8-18 22:42
jako 发表于 2013-8-18 16:09
我试了下 把输出来的url  复制到浏览器上,结果打不开,我觉得应该是站点的问题,在43课的那几个网站也打 ...

浏览器打不开是正常的,是它xml文件格式问题,你在网页上查看源代码就能看到内容了,这个不影响。

我意思,把你程序中拼出来的“url”变量打出来。如果我没猜错,你的citycode没有拿到正确的值
作者: jako    时间: 2013-8-18 23:15
crossin先生 发表于 2013-8-18 22:42
浏览器打不开是正常的,是它xml文件格式问题,你在网页上查看源代码就能看到内容了,这个不影响。

我意 ...
  1. # -*- coding: utf-8 -*-
  2. from urllib2 import urlopen
  3. import json
  4. from city import city
  5. cityname = raw_input('你想查哪个城市的天气?\n')
  6. citycode = city.get(cityname)
  7. if citycode:
  8.     url = 'https://www.weather.com.cn/data/cityinfo/%s.html'%citycode
  9.     print url
  10.     f = urlopen(url)
  11.     content = f.read()
  12.     print content
复制代码
输出url是这样子

ubuntu.PNG (57.74 KB, 下载次数: 601)

ubuntu.PNG


作者: crossin先生    时间: 2013-8-20 14:30
jako 发表于 2013-8-18 23:15
输出url是这样子

不要用https,改成http
作者: jako    时间: 2013-8-20 15:29
crossin先生 发表于 2013-8-20 14:30
不要用https,改成http

解决了!  真的是手贱打多了个s。。。  谢谢crossin
作者: 笨熊    时间: 2013-9-6 14:05
feicien 发表于 2013-7-24 09:03

感谢! urllib2在Python3里已经改名了,抓取数据的方法也不同了。还有抓取的内容需要.decode('utf-8')一下,不然没法用json.loads()。
作者: Sooongz    时间: 2013-9-10 22:49
为什么我在python3下获得的数据是这样的
b'{"weatherinfo":{"city":"\xe5\x8d\x97\xe4\xba\xac","cityid":"101190101","temp1":"24\xe2\x84\x83","temp2":"27\xe2\x84\x83","weather":"\xe9\x9b\xb7\xe9\x98\xb5\xe9\x9b\xa8\xe8\xbd\xac\xe4\xb8\xad\xe9\x9b\xa8","img1":"n4.gif","img2":"d8.gif","ptime":"18:00"}}'

作者: crossin先生    时间: 2013-9-10 23:25
Sooongz 发表于 2013-9-10 22:49
为什么我在python3下获得的数据是这样的
b'{"weatherinfo":{"city":"\xe5\x8d\x97\xe4\xba\xac","cityid":" ...

你这个已经快接近了啊,把这个json数据取出来就是结果了
作者: 羽扇纶巾    时间: 2013-9-27 17:14
小坏 发表于 2013-8-8 17:34
编码问题解决分享:
我用win7的,照编码写的出了问题,返回的citycode都是None。后在群里童鞋指导下,把cit ...

我和你遇到一样的问题,终于解决了,多谢!
作者: TongShan    时间: 2013-10-10 16:36
程序运行出现如图错误,该如何修改?谢谢。

QQ图片20131010163323.jpg (100.5 KB, 下载次数: 594)

QQ图片20131010163323.jpg

QQ图片20131010163310.jpg (158.85 KB, 下载次数: 583)

QQ图片20131010163310.jpg


作者: TongShan    时间: 2013-10-10 16:39
TongShan 发表于 2013-10-10 16:36
程序运行出现如图错误,该如何修改?谢谢。

运行程序后没有要求输入需要查询的城市,而是直接列出了所以的城市名称和对应代码,部分城市名称为乱码
作者: TongShan    时间: 2013-10-10 17:26
在虚拟机centos环境下,没有出现城市名称乱码,但是仍然没有出现输入城市名称的选项,最后返回到错误如下,求解:

Traceback (most recent call last):
  File "weather.py", line 4, in <module>
    from city import city
  File "/home/weihua/Crossin/city.py", line 27, in <module>
    code = content4.split('|')[1]
IndexError: list index out of range



作者: crossin先生    时间: 2013-10-10 17:47
TongShan 发表于 2013-10-10 17:26
在虚拟机centos环境下,没有出现城市名称乱码,但是仍然没有出现输入城市名称的选项,最后返回到错误如下, ...

你的city.py这个文件,是一个获取城市列表的程序,也就是查天气之前要做的准备工作。这个和43课附件里那个city.py不是一个东西。你可以去43课(【Python 第43课】 查天气(1)
http://crossin.me/forum.php?mod= ... tid=8&fromuid=3
)附件里下载抓取好的城市列表。
作者: crossin先生    时间: 2013-10-10 17:49
TongShan 发表于 2013-10-10 16:39
运行程序后没有要求输入需要查询的城市,而是直接列出了所以的城市名称和对应代码,部分城市名称为乱码 ...

至于乱码问题,可以参考这里:http://crossin.me/forum.php?mod= ... d=799&fromuid=3
作者: TongShan    时间: 2013-10-10 18:01
crossin先生 发表于 2013-10-10 17:47
你的city.py这个文件,是一个获取城市列表的程序,也就是查天气之前要做的准备工作。这个和43课附件里那 ...

谢谢,问题解决,原来是用错了city.py
作者: pyer_hwb    时间: 2013-10-16 10:15
crossin先生 发表于 2013-9-10 23:25
你这个已经快接近了啊,把这个json数据取出来就是结果了

我想问下,这个json怎么取出来啊??
作者: pyer_hwb    时间: 2013-10-16 12:44
Sooongz 发表于 2013-9-10 22:49
为什么我在python3下获得的数据是这样的
b'{"weatherinfo":{"city":"\xe5\x8d\x97\xe4\xba\xac","cityid":" ...

你可以这样做:
  1. import urllib.request
  2. import json
  3. list=urllib.request.urlopen('http://www.weather.com.cn/data/cityinfo/101190101.html').read();
  4. list=list.decode('utf-8')
  5. print(list)
复制代码

作者: pyer_hwb    时间: 2013-10-16 13:24
在Linux上,这么做是可以输出的,没有乱码。但是在windows上,就会有点问题了。。
作者: pyer_hwb    时间: 2013-10-16 13:36
问个问题啊。
我在windows上和linux上都运行相同的代码,但是结果不一样..
代码都是如下所示
  1. import urllib.request

  2. url=("http://www.baidu.com")
  3. request=urllib.request.Request(url)
  4. response=urllib.request.urlopen(request)
  5. content=response.read().decode("utf-8")
  6. try:
  7.     with open('./baidu.html','w') as data:
  8.         print(content,file=data)
  9. except IOError as a:
  10.     print('IOerror'+str(a))
  11. print(content)
复制代码
然后我在linux下打开这个网页的话,是正常显示的,但是在windows下打开的话,那些汉字会变成菱形..如果我把浏览器的编码换成gbk的话,那就可以正常显示了,这是为什么?
作者: crossin先生    时间: 2013-10-16 15:54
pyer_hwb 发表于 2013-10-16 13:36
问个问题啊。
我在windows上和linux上都运行相同的代码,但是结果不一样..
代码都是如下所示然后我在linux ...

编码的问题。但我也不确定是那里的问题。
可能是因为,你的文件编码是utf8,但你保存的网页内容里面并没有指定编码,或者指定的不是utf8编码。所以浏览器默认并不知道要用何种编码来显示。在windows下出问题,可能是和windows下你那个浏览器的默认显示编码有关
作者: pyer_hwb    时间: 2013-10-16 23:12
crossin先生 发表于 2013-10-16 15:54
编码的问题。但我也不确定是那里的问题。
可能是因为,你的文件编码是utf8,但你保存的网页内容里面并没 ...

好的。。谢了。
作者: YuanXQ_131015    时间: 2013-10-26 17:57
先生好,我才看到这儿,我用的也是win7.
按照前面同学说的,city.py文件跟lesson44.py文件开头都加上了# -*- coding: cp936 -*-
而我的在from city import city这句报错了“SyntaxError: encoding problem: utf-8”

这个怎么解决?

PS:utf-8 是可以运行的,但是如上面同学说的,输入城市后在字典中找不到对应的key,输出citycode是None,我输出下city,显示的是46节下面那个同学同样的问题,乱码
作者: YuanXQ_131015    时间: 2013-10-26 23:51
YuanXQ_131015 发表于 2013-10-26 17:57
先生好,我才看到这儿,我用的也是win7.
按照前面同学说的,city.py文件跟lesson44.py文件开头都加上了# -* ...

好吧,我自问自答,关于上面的那个问题,win7下用cp936是对的。
关于我的问题报错
“按照前面同学说的,city.py文件跟lesson44.py文件开头都加上了# -*- coding: cp936 -*-
而我的在from city import city这句报错了“SyntaxError: encoding problem: utf-8””

是因为上面让改的内容我是用txt打开之后改的,怀疑txt下的编码可能跟python的不太一样
作者: crossin先生    时间: 2013-11-28 17:52
YuanXQ_131015 发表于 2013-10-26 23:51
好吧,我自问自答,关于上面的那个问题,win7下用cp936是对的。
关于我的问题报错
“按照前面同学说的,c ...

不要用windows的默认文本编辑器来改代码。那个会在你的文件头上加上额外的数据。
作者: nemo    时间: 2013-12-26 23:13
本帖最后由 nemo 于 2013-12-26 23:15 编辑

求助:
我直接用url = ('http://www.weather.com.cn/data/cityinfo/101010100.html' )是可以得到正确结果的;
但是用主贴的代码输入北京后却什么反应都没有,程序直接结束;
如果去掉if citycode那一行,可以得到一堆包含‘找不到该页面’的代码。
我2个文件都加了# -*- coding: UTF-8 -*- ,不然会报错。
我用的是py2.7,xp.
作者: 今天手气不错啊    时间: 2014-1-13 11:13
老师,这是什么情况?

查天气.jpg (147.94 KB, 下载次数: 564)

查天气.jpg


作者: crossin先生    时间: 2014-1-13 15:27
今天手气不错啊 发表于 2014-1-13 11:13
老师,这是什么情况?

页面没找到,可能是url错了
作者: 今天手气不错啊    时间: 2014-1-14 09:38
crossin先生 发表于 2014-1-13 15:27
页面没找到,可能是url错了

问题解决了,是编码问题
作者: ddtty    时间: 2014-2-6 15:12
feicien 发表于 2013-7-24 09:03

这样也行
import urllib.request
from city import city

exit=False

while not exit:
    cityname=input("你想查询哪个城市的天气?输入q退出\n")
    if cityname=="q" or cityname=="Q":
        print("退出!")
        exit=True
    else:
        citycode=city.get(cityname)
        if citycode:
            url=("http://www.weather.com.cn/data/cityinfo/%s.html"%citycode)
            web=urllib.request.urlopen(url)
            c=web.read().decode("utf-8")
            print(c)
文档:urllib.request.urlopen(url, data=None[, timeout ], *, cafile=None, capath=None, cadefault=False)
Open the URL url, which can be either a string or a Request object
这个网页不需要转换,直接read输出就行
作者: 508490571    时间: 2014-3-16 23:35
  1. while qw==True:
  2.     if cityname=='q' or cityname=='Q':
  3.         print'退出'
  4.         qw=False
  5.     else:
  6.         if citycode:
  7.             url='http://www.weather.com.cn/data/cityinfo/%s.html' % citycode
  8.             content=urllib2.urlopen(url).read()
  9.             print content
  10.         else:
  11.             print'sorry'
复制代码
while语句哪里不对吗?死循环了
你想查哪个城市的天气?
北京
{"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"5℃","temp2":"19℃","weather":"多云转晴","img1":"n1.gif","img2":"d0.gif","ptime":"18:00"}}
{"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"5℃","temp2":"19℃","weather":"多云转晴","img1":"n1.gif","img2":"d0.gif","ptime":"18:00"}}
{"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"5℃","temp2":"19℃","weather":"多云转晴","img1":"n1.gif","img2":"d0.gif","ptime":"18:00"}}
{"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"5℃","temp2":"19℃","weather":"多云转晴","img1":"n1.gif","img2":"d0.gif","ptime":"18:00"}}
{"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"5℃","temp2":"19℃","weather":"多云转晴","img1":"n1.gif","img2":"d0.gif","ptime":"18:00"}}
{"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"5℃","temp2":"19℃","weather":"多云转晴","img1":"n1.gif","img2":"d0.gif","ptime":"18:00"}}
{"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"5℃","temp2":"19℃","weather":"多云转晴","img1":"n1.gif","img2":"d0.gif","ptime":"18:00"}}
{"weatherinfo":{"city":"北京","cityid":"101010100","temp1":"5℃","temp2":"19℃","weather":"多云转晴","img1":"n1.gif","img2":"d0.gif","ptime":"18:00"}}

作者: crossin先生    时间: 2014-3-17 10:18
508490571 发表于 2014-3-16 23:35
while语句哪里不对吗?死循环了
你想查哪个城市的天气?
北京

你的while本身确实是个死循环,在while没有修改退出条件的地方。可以修改的那条语句一直不会执行到。
除非你一开始输入的就是q
作者: 508490571    时间: 2014-3-17 11:06
crossin先生 发表于 2014-3-17 10:18
你的while本身确实是个死循环,在while没有修改退出条件的地方。可以修改的那条语句一直不会执行到。
除 ...

确实是  非常感谢
作者: keamin    时间: 2014-3-29 16:18
我在PyDev里使用urllib2.urlopen报出AttributeError: 'module' object has no attribute 'urlopen'错误,但在Shell里却正常,不知是何原因。
PyDev里报错
Shell截图.jpg

作者: crossin先生    时间: 2014-3-30 21:39
keamin 发表于 2014-3-29 16:18
我在PyDev里使用urllib2.urlopen报出AttributeError: 'module' object has no attribute 'urlopen'错误,但 ...

你是不是把你的代码文件命名成了 urllib2.py ?
作者: keamin    时间: 2014-3-30 21:51
crossin先生 发表于 2014-3-30 21:39
你是不是把你的代码文件命名成了 urllib2.py ?


谢谢
作者: fptxyy    时间: 2014-4-2 18:51
本帖最后由 fptxyy 于 2014-4-3 10:47 编辑

老师您好,我用的是python 2.7.5,
代码复制的,
from city import city
cityname = raw_input('你想查哪个城市的天气?\n')
citycode = city.get(cityname)
if citycode:
   url = 'http://www.weather.com.cn/data/cityinfo/%s.html' % citycode
   content = urllib2.urlopen(url).read()
   print content

运行后,不显示天气,
>>> ======= RESTART =========
>>>
你想查哪个城市的天气?
北京
>>>

请问您
作者: crossin先生    时间: 2014-4-3 13:42
fptxyy 发表于 2014-4-2 18:51
老师您好,我用的是python 2.7.5,
代码复制的,
from city import city

应该是字符编码问题
你如果是windows,把city.py第一行的utf-8改为cp936
具体原因这几课的相关讨论帖子里有,好像在查天气(4)里
作者: fptxyy    时间: 2014-4-3 15:07
crossin先生 发表于 2014-4-3 13:42
应该是字符编码问题
你如果是windows,把city.py第一行的utf-8改为cp936
具体原因这几课的相关讨论帖子里 ...

太感激了,老师!
正是city.py文件的问题,改过来就好了。
根本没想到,我还一直在源代码上打转。(送花)
作者: toddlerya    时间: 2014-5-10 15:40
grdzyz 发表于 2013-7-27 22:25
下面的截图是什么软件上编写的?

Ubuntu系统
作者: toddlerya    时间: 2014-5-10 15:42
小坏 发表于 2013-8-8 17:34
编码问题解决分享:
我用win7的,照编码写的出了问题,返回的citycode都是None。后在群里童鞋指导下,把cit ...

嗯 一样的问题UTF-8编码不识别在WIN7
作者: toddlerya    时间: 2014-5-10 15:42
grdzyz 发表于 2013-7-27 22:25
下面的截图是什么软件上编写的?

是在UUbuntu系统下编写的
作者: 文心雕龙    时间: 2014-5-14 20:25
只能访问这个www.weather.com.cn,,而这个www.weather.com.cn/data/cityinfo不存在,咋整?
作者: crossin先生    时间: 2014-5-15 10:57
文心雕龙 发表于 2014-5-14 20:25
只能访问这个www.weather.com.cn,,而这个www.weather.com.cn/data/cityinfo不存在,咋整? ...

确实不存在,要加上后面的城市代码才行,你看程序里的写法,这不是个完整的url
作者: 文心雕龙    时间: 2014-5-15 21:30
嗯嗯,是的,把city的name换成城市代码,在做一些修改就可以了,谢谢
作者: 文心雕龙    时间: 2014-5-15 21:31
crossin先生 发表于 2014-5-15 10:57
确实不存在,要加上后面的城市代码才行,你看程序里的写法,这不是个完整的url ...

嗯嗯,是的,把city的name换成城市代码,在做一些修改就可以了,谢谢
作者: crossin先生    时间: 2014-5-16 11:59
文心雕龙 发表于 2014-5-15 21:31
嗯嗯,是的,把city的name换成城市代码,在做一些修改就可以了,谢谢


作者: Jpython    时间: 2014-5-22 15:33
crossin先生 发表于 2014-4-3 13:42
应该是字符编码问题
你如果是windows,把city.py第一行的utf-8改为cp936
具体原因这几课的相关讨论帖子里 ...

果然是字符编码的问题,怪不得citycode = city.get(cityname)返回的永远是None.
谢谢crossin
作者: QQ_5CB70A    时间: 2014-6-13 17:02
city.py在哪里?
作者: crossin先生    时间: 2014-6-13 18:32
QQ_5CB70A 发表于 2014-6-13 17:02
city.py在哪里?

上一课帖子最后
作者: jasondyq    时间: 2014-8-12 22:12
先生,city.py不能查询时什么情况。加上了utf-8,。输入“北京”,直接返回“None”。注意到city.py目录有一个city.pyc文件。求解?
作者: jasondyq    时间: 2014-8-12 22:18
小坏 发表于 2013-8-8 17:34
编码问题解决分享:
我用win7的,照编码写的出了问题,返回的citycode都是None。后在群里童鞋指导下,把cit ...

我的不行呀,改了city.py的编码后报错SyntaxError: 'gbk' codec can't decode bytes in position 7-8: illegal multibyte sequence
作者: crossin先生    时间: 2014-8-13 10:48
jasondyq 发表于 2014-8-12 22:18
我的不行呀,改了city.py的编码后报错SyntaxError: 'gbk' codec can't decode bytes in position 7-8: il ...

这个可能是你的编辑器自己又设置了编码。
如果是用PyScripter,有时会出现这样的混乱
用idle可能好些
作者: jasondyq    时间: 2014-8-13 13:32
crossin先生 发表于 2014-8-13 10:48
这个可能是你的编辑器自己又设置了编码。
如果是用PyScripter,有时会出现这样的混乱
用idle可能好些 ...

多谢先生,终于解决了。我开始用的notepad++,应该它自己设置了编码
作者: Go_for_Math    时间: 2014-10-16 15:56
小坏 发表于 2013-8-8 17:34
编码问题解决分享:
我用win7的,照编码写的出了问题,返回的citycode都是None。后在群里童鞋指导下,把cit ...

感谢~
作者: z344618505    时间: 2014-11-22 20:01
C老师,这种.get()是在那里面的东西啊,找了好久找不到
作者: crossin先生    时间: 2014-11-22 21:19
z344618505 发表于 2014-11-22 20:01
C老师,这种.get()是在那里面的东西啊,找了好久找不到

这里city是从另一个文件读进来的dict字典对象
get是dict的一个方法
在dict的文档里会有说
作者: z344618505    时间: 2014-11-23 14:50
crossin先生 发表于 2014-11-22 21:19
这里city是从另一个文件读进来的dict字典对象
get是dict的一个方法
在dict的文档里会有说 ...

多谢哈
作者: 未来的~布斯    时间: 2015-2-8 15:59
小坏 发表于 2013-8-8 17:34
编码问题解决分享:
我用win7的,照编码写的出了问题,返回的citycode都是None。后在群里童鞋指导下,把cit ...

我的也是win7的,出现的问题和你一样,然后按照你的,把两个py文件的开头换成# -*- coding: utf-8 -*- 结果出现错误如下:

Traceback (most recent call last):
  File "D:\python\text\wea001.py", line 4, in <module>
    from city import city
  File "D:\python\text\city.py", line 2
    '鍖椾含': '101010100',
   ^
IndentationError: unexpected indent

该怎么改呢?在线急等回复
作者: crossin先生    时间: 2015-2-8 23:55
未来的~布斯 发表于 2015-2-8 15:59
我的也是win7的,出现的问题和你一样,然后按照你的,把两个py文件的开头换成# -*- coding: utf-8 -*- 结 ...

试试改成 -*- coding: cp936 -*-
作者: nanshoua    时间: 2015-2-13 17:15
我的出现这样的东西
你想查哪个城市的天气?
北京
<!DOCTYPE HTML>
<html>
<head>
<link rel="dns-prefetch" href="http://i.tq121.com.cn">
<meta charset="utf-8" />
<title>非常抱歉,网页无法访问</title>
<meta  name="keywords" content="天气预报,天气,天气预报查询一周,天气预报15天查询,天气预报查询,北京天气,天气在线,气候,气象" />
<meta name="description" content="中国天气网官方权威发布天气预报,逐三小时天气预报,提供天气预报查询一周,天气预报15天查询,空气质量,生活指数,旅游出行,交通天气等查询服务" />
<meta name="msapplication-task" content="name=天气资讯;action-uri=http://news.weather.com.cn/index.shtml;icon-uri=http://www.weather.com.cn/favicon.ico" />
<meta name="msapplication-task" content="name=生活天气;action-uri=http://www.weather.com.cn/life/index.shtml;icon-uri=http://www.weather.com.cn/favicon.ico" />
<meta name="msapplication-task" content="name=气象科普;action-uri=http://www.weather.com.cn/science/index.shtml;icon-uri=http://www.weather.com.cn/favicon.ico" />
<meta name="msapplication-task" content="name=灾害预警;action-uri=http://www.weather.com.cn/alarm/index.shtml;icon-uri=http://www.weather.com.cn/favicon.ico" />
<meta name="msapplication-task" content="name=旅游天气;action-uri=http://www.weather.com.cn/trip/index.shtml;icon-uri=http://www.weather.com.cn/favicon.ico" />
<style>
body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, p, blockquote, th, td, article, aside, summary, details, figcaption, figure, footer, header, hgroup, menu, nav, section { margin:0; padding:0 }
article, aside, summary, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display:block }
table { border-collapse:collapse; border-spacing:0 }
fieldset, img { border:0; vertical-align:middle }
address, caption, cite, code, dfn, em, strong, th, var { font-style:normal; font-weight:normal }
ul, ol { list-styleutside none none }
q:before, q:after { content:'' }
abbr, acronym { border:0 }
input, button, select { vertical-align:middle }
.fl { float:left; display:inline }
.fr { float:right; display:inline }
body { background-color:#fff; background-attachment:fixed; background-position:center top; background-repeat:no-repeat; padding:0; margin:0; border:0; font:14px/1.6 "Microsoft Yahei", "Tahoma", "SimSun" }
* { padding:0; margin:0; border:0 }
ul { list-style:none }
a { text-decoration:none; color:#252525 }
a:hover { color:#ee842f }
.clear { clear:both; height:0; overflow:hidden }
nav { display:block }
table { border-collapse:collapse }
h1, h, h3, h4, h5, h6 { font-weight:normal }
.clearfix { zoom:1 }
.clearfix:after { content:"."; display:block; clear:both; visibility:hidden; height:0 }
body { color:#666666; }
i { font-style:normal; }
.nide { width:1000px; margin:0 auto; }
.cuo { width:885px; margin:0 auto 60px; }
.cuo h1 { color:#636060; height:290px; line-height:290px; font-size:40px; font-weight:bold; }
.cuo h1 span { font-weight:bold; padding-right:20px; font-size:100px; }
.cuo p { margin-bottom:20px; font-size:23px; }
.cuo p a { color:#16459a; }
.cuo p a:hover{ color:#ee842f; }
.zuo ul li a img { width:155px; height:120px; }
.zuo { width:1021px; float:left; }
.zuo ul li { float:left; width:155px; text-align:center; height:120px; margin-right:15px; display:inline; }
.zuo ul li a { margin-bottom:10px; display:block; width:155px; }
.zuo ul { width:340px; float:left; }
#search .midBlock { position:relative; z-index:99; width:1000px; margin:0 auto; }
#search { height:64px; margin:16px auto; height:64px; border-bottom:3px solid #ccc; }
#search .midBlock .selCity { position:absolute; width:210px; height:120px; top:0px; left:390px; background-color:#ebebeb; padding:0px 20px 20px 20px; display:none; }
#search .midBlock .selCity p { text-align:left; }
#search .midBlock .selCity p.droplist { line-height:25px; z-index:99; position:relative; }
#search .midBlock .selCity p.title { color:#076EA8; }
#search h1 { display:block; float:left; width:140px; margin-top:15px; margin-right:10px; overflow:hidden; }
body { color:#666666; }
i { font-style:normal; }
.nide { width:1000px; margin:0 auto; }
.cuo { width:885px; margin:0 auto 60px; }
.cuo h1 { color:#636060; height:290px; line-height:290px; font-size:40px; font-weight:bold; }
.cuo h1 span { font-weight:bold; padding-right:20px; font-size:100px; }
.cuo p { margin-bottom:20px; font-size:23px; }
.cuo p a { color:#16459a; }
.zuo ul li a img { width:155px; height:120px; }
.zuo { width:1021px; float:left; }
.zuo ul li { float:left; width:155px; text-align:center; height:120px; margin-right:15px; display:inline; }
.zuo ul li a { margin-bottom:10px; display:block; width:155px; }
.zuo ul { width:340px; float:left; }
#search .midBlock { position:relative; z-index:99; width:1000px; margin:0 auto; }
#search { height:64px; margin:16px auto; height:64px; border-bottom:3px solid #ccc; }
#search .midBlock .selCity { position:absolute; width:210px; height:120px; top:0px; left:390px; background-color:#ebebeb; padding:0px 20px 20px 20px; display:none; }
#search .midBlock .selCity p { text-align:left; }
#search .midBlock .selCity p.droplist { line-height:25px; z-index:99; position:relative; }
#search .midBlock .selCity p.title { color:#076EA8; }
#search h1 { display:block; float:left; width:140px; height:35px; background:url(); margin-top:15px; margin-right:10px; overflow:hidden; }
#search h1 a { display:block; width:140px; height:35px; text-indent:-9999px; }
#txtZip { font-size: 14px; height: 35px; line-height: 35px; padding-left:10px; background:none; color: #6bb0da; margin-top: 2px; text-indent: 4px; width: 285px; }
#btnZip { background: none; cursor: pointer; height: 23px; text-indent: -9999px; width: 42px; }
</style>
</head>

<body>
<div id="search">
  <div class="midBlock">
    <h1> <a title="中国天气网" href="http://www.weather.com.cn">中国天气</a> </h1>
  </div>
</div>
<div class="nide">
  <div class="cuo">
    <h1><span><i style="color:#dd8d8d;">4</i><i style="color:#84b998">0</i><i style="color:#84adc2;">4</i></span>您访问的页面不存在</h1>
    <p>您可以:<a href="http://www.weather.com.cn">返回首页</a></p>
    <p>或者看看下面的美图吧!</p>
  </div>
  <div class="zuo">
<ul><li><a href="http://p.weather.com.cn/2015/02/zrds/2271339.shtml"  target="_blank" title="云飞鹤舞迎春到"><img alt="云飞鹤舞迎春到" src="http://pic.weather.com.cn/images/cn/photo/2015/02/13/EC380471C36008416FFCA00677877345_s.jpg" target="_blank"></a><a href="http://p.weather.com.cn/2015/02/zrds/2271339.shtml"  target="_blank" title="云飞鹤舞迎春到">云飞鹤舞迎春到</a></li><li><a href="http://p.weather.com.cn/2015/02/zrds/2271331.shtml"  target="_blank" title="烟台海滨现“千鸥争食”"><img alt="烟台海滨现“千鸥争食”" src="http://pic.weather.com.cn/images/cn/photo/2015/02/13/F4DF897BADAEAABBFF0F0C6CD2F04EB4_s.jpg" target="_blank"></a><a href="http://p.weather.com.cn/2015/02/zrds/2271331.shtml"  target="_blank" title="烟台海滨现“千鸥争食”">烟台海滨现“千鸥争食”</a></li></ul>




<ul><li><a href="http://p.weather.com.cn/2015/02/txqg/2271268.shtml"  target="_blank" title="摄影师高空拍赌城夜景 如电脑芯片"><img alt="摄影师高空拍赌城夜景 如电脑芯片" src="http://pic.weather.com.cn/images/cn/photo/2015/02/13/D135E474F543136F18157A985E9DA1C6_s.jpg" target="_blank"></a><a href="http://p.weather.com.cn/2015/02/txqg/2271268.shtml"  target="_blank" title="摄影师高空拍赌城夜景 如电脑芯片">摄影师高空拍赌城夜景 如电脑芯片</a></li><li><a href="http://p.weather.com.cn/2015/02/txqg/2269595.shtml"  target="_blank" title="加拿大冰雪酒店 顾客躺冰床入睡"><img alt="加拿大冰雪酒店 顾客躺冰床入睡" src="http://pic.weather.com.cn/images/cn/photo/2015/02/09/CA8138F07A556B6C3B2B59447ADECAF4_s.jpg" target="_blank"></a><a href="http://p.weather.com.cn/2015/02/txqg/2269595.shtml"  target="_blank" title="加拿大冰雪酒店 顾客躺冰床入睡">加拿大冰雪酒店 顾客躺冰床入睡</a></li></ul>




<ul><li><a href="http://p.weather.com.cn/2015/02/tqsh/2271565.shtml"  target="_blank" title="盘点全球最具个性的另类“玫瑰花”"><img alt="盘点全球最具个性的另类“玫瑰花”" src="http://pic.weather.com.cn/images/cn/photo/2015/02/13/C5EBFD231F9A718D8556C5A72744161A_s.jpg" target="_blank"></a><a href="http://p.weather.com.cn/2015/02/tqsh/2271565.shtml"  target="_blank" title="盘点全球最具个性的另类“玫瑰花”">盘点全球最具个性的另类“玫瑰花”</a></li><li><a href="http://p.weather.com.cn/2015/02/tqsh/2271487.shtml"  target="_blank" title="“我们俩”"><img alt="“我们俩”" src="http://pic.weather.com.cn/images/cn/photo/2015/02/13/5C33AFB987D73D1CBFC5997D16CB2FE9_s.jpg" target="_blank"></a><a href="http://p.weather.com.cn/2015/02/tqsh/2271487.shtml"  target="_blank" title="“我们俩”">“我们俩”</a></li></ul>




  </div>
</div>
<script type="text/javascript" src="http://c.wrating.com/a1.js">
</script>
<script type="text/javascript">
var vjAcc="860010-2099220100";
var wrUrl="http://c.wrating.com/";
vjTrack("");
</script>
<noscript>
<img src="http://c.wrating.com/a.gif?a=&c=860010-2099220100" width="1" height="1"/>
</noscript>

</body>
</html>
作者: crossin先生    时间: 2015-2-14 17:07
nanshoua 发表于 2015-2-13 17:15
我的出现这样的东西
你想查哪个城市的天气?
北京

访问地址打错了或者失效了
得到的是个错误提示页面 “非常抱歉,网页无法访问”
作者: ccccccindy    时间: 2015-3-4 14:28
请问大神们,我输入“北京”后,没有返回结果,这是什么问题呢,又如何解决??

代码如下:

# -*- coding: UTF-8 -*-
import urllib2
from city import city

exit=False

while not exit:
    cityname=raw_input("你想查询哪个城市的天气?输入q退出\n")
    if cityname=="q" or cityname=="Q":
        print("退出!")
        exit=True
    else:
        citycode=city.get(cityname)
        if citycode:
            url=("http://www.weather.com.cn/data/cityinfo/%s.html"%citycode)
            request=urllib.request.Request(url)
            response=urllib.request.urlopen(request)
            content=response.read().decode("utf-8")
            print(content)


搜狗截图20150304142055.png (8.47 KB, 下载次数: 416)

搜狗截图20150304142055.png


作者: ccccccindy    时间: 2015-3-4 14:30
crossin先生 发表于 2015-2-8 23:55
试试改成 -*- coding: cp936 -*-

我按你说的改过了,可是也不成功
作者: crossin先生    时间: 2015-3-5 13:52
ccccccindy 发表于 2015-3-4 14:30
我按你说的改过了,可是也不成功

大概是现在接口变了,以前的接口已经失效了
http://m.weather.com.cn/atad/101230201.html
类似这个,不过好像也时好时坏
作者: naFgnaYuX    时间: 2015-11-10 11:00
哪儿去下载城市附件city.py呀?
作者: crossin先生    时间: 2015-11-10 12:50
naFgnaYuX 发表于 2015-11-10 11:00
哪儿去下载城市附件city.py呀?

查天气1里
作者: naFgnaYuX    时间: 2015-11-11 02:42
crossin先生 发表于 2015-11-10 12:50
查天气1里

谢谢,之前是在百度找到你的word版看的,不明白,就找到论坛来了,回复这么快,谢谢了
作者: 我是佩佩学姐    时间: 2015-11-11 23:53
参考了楼上各种方法,最后是在idle打开city,然后修改utf-8为cp936,但是运行后,居然还是出现问题,问题反馈如下:
请教Crossin先生,出现以下错误,但是在浏览器可以打开,这种是被封了吗?是需要传说的伪装header才可以么?
  1. 你想查询哪个城市的天气?
  2. 北京
  3. 101010100

  4. http:\www.weather.com.cn/data/cityinfo/101010100.html  #添加测试url完整

  5. Traceback (most recent call last):
  6.   File "D:\2B Coder\lesson\crossin\practice\lesson44.py", line 23, in <module>
  7.     content=urllib2.urlopen(url).read()
  8.   File "C:\Python27\lib\urllib2.py", line 154, in urlopen
  9.     return opener.open(url, data, timeout)
  10.   File "C:\Python27\lib\urllib2.py", line 429, in open
  11.     req = meth(req)
  12.   File "C:\Python27\lib\urllib2.py", line 1125, in do_request_
  13.     raise URLError('no host given')
  14. URLError: <urlopen error no host given>
复制代码

作者: crossin先生    时间: 2015-11-12 13:04
我是佩佩学姐 发表于 2015-11-11 23:53
参考了楼上各种方法,最后是在idle打开city,然后修改utf-8为cp936,但是运行后,居然还是出现问题,问题反馈 ...

url 写的不对吧,http://
作者: 我是佩佩学姐    时间: 2015-11-12 13:53
crossin先生 发表于 2015-11-12 13:04
url 写的不对吧,http://

这个我自己在查天气(3)里面发现了~谢谢先生指点
作者: Kunz    时间: 2015-12-24 16:48
feicien 发表于 2013-7-24 09:07
我下载的是python3.3
发现语法与python2.7有很大区别,这是我在python3.3下写的代码
加了一个while循环, ...

我也用的3.X的  确实和2.7差别很大,教程里最近这几课确实困扰了我很久,感谢你带我走出泥潭走向光明!!!!!
作者: Kunz    时间: 2015-12-24 16:51
feicien 发表于 2013-7-24 09:03

有点小问题想要问下,
在教程中的 content = urllib2.urlopen(url).read()
一定要写成
            request=urllib.request.Request(url)
            response=urllib.request.urlopen(request)
            content=response.read().decode("utf-8")
吗??
加这句response=urllib.request.urlopen(request)是什么意思啊??
作者: crossin先生    时间: 2015-12-24 21:48
Kunz 发表于 2015-12-24 16:51
有点小问题想要问下,
在教程中的 content = urllib2.urlopen(url).read()
一定要写成

两个用的库不一样,都可以
作者: catherinemic    时间: 2016-1-21 23:43
crossin先生,我直接在浏览器输入带有北京code的查天气网址,得到一个有乱码的页面内容,运行程序也报错,是什么问题呢?网址应该是存在的呀~
  1. # -*- coding: cp936 -*-
  2. import urllib2
  3. import json
  4. from city import city
  5. cityname=raw_input("Which city's weather do you want to know?\n")
  6. citycode=city.get(cityname)
  7. print citycode
  8. if citycode:
  9.     url='http://www.weather.com.cn/data/cityinfo/%s.html'%citycode
  10.     content=urllib2.urlopen(url).read()
  11.    
复制代码

Python22.png (14.34 KB, 下载次数: 428)

Python22.png

Python23.png (29.96 KB, 下载次数: 434)

Python23.png


作者: crossin先生    时间: 2016-1-22 12:32
catherinemic 发表于 2016-1-21 23:43
crossin先生,我直接在浏览器输入带有北京code的查天气网址,得到一个有乱码的页面内容,运行程序也报错, ...

404,说明没有请求到页面
在程序中把请求的网址print出来看对不对
作者: 812002505    时间: 2016-1-22 15:39
crossin先生 发表于 2016-1-22 12:32
404,说明没有请求到页面
在程序中把请求的网址print出来看对不对

我这输入北京,还是显示none饿。。 cp936我试过了  没有用
代码如下:
# -*- coding: UTF-8 -*-  
import urllib2

from city import city

cityName = raw_input('请输入要查询的城市:')
userNum = city.get(cityName)
print userNum
作者: 812002505    时间: 2016-1-22 15:39
crossin先生 发表于 2016-1-22 12:32
404,说明没有请求到页面
在程序中把请求的网址print出来看对不对

我这输入北京,还是显示none饿。。 cp936我试过了  没有用
代码如下:
# -*- coding: UTF-8 -*-  
import urllib2

from city import city

cityName = raw_input('请输入要查询的城市:')
userNum = city.get(cityName)
print userNum
作者: catherinemic    时间: 2016-1-22 16:27
crossin先生 发表于 2016-1-22 12:32
404,说明没有请求到页面
在程序中把请求的网址print出来看对不对

今天按照您说的试了一下,citycode返回正确,网址print出来没有问题,也没有出现昨天的问题,但是没有返回任何天气内容,直接就结束了,为什么呢?
  1. # -*- coding: cp936 -*-
  2. import urllib2
  3. import json
  4. from city import city
  5. cityname=raw_input("Which city's weather do you want to know?\n")
  6. citycode=city.get(cityname)
  7. print citycode
  8. if citycode:
  9.     url='http://www.weather.com.cn/data/cityinfo/%s.html'%citycode
  10.     print url
  11.     content=urllib2.urlopen(url).read()
复制代码

Python24.png (6.38 KB, 下载次数: 423)

Python24.png


作者: catherinemic    时间: 2016-1-22 16:46
catherinemic 发表于 2016-1-22 16:27
今天按照您说的试了一下,citycode返回正确,网址print出来没有问题,也没有出现昨天的问题,但是没有返回 ...

哎呀,傻了,最后忘记print了。。。这次没问题了~~谢谢crossin先生!
作者: crossin先生    时间: 2016-1-23 11:12
812002505 发表于 2016-1-22 15:39
我这输入北京,还是显示none饿。。 cp936我试过了  没有用
代码如下:
# -*- coding: UTF-8 -*-  

你看city.py里面有没有指定编码。这几个文件,在win下,都改成cp936
作者: 812002505    时间: 2016-1-25 11:14
crossin先生 发表于 2016-1-23 11:12
你看city.py里面有没有指定编码。这几个文件,在win下,都改成cp936

两个文件都换了cp936还是不可以     另外 我是mac系统的  咋回事呢?
作者: crossin先生    时间: 2016-1-25 11:18
812002505 发表于 2016-1-25 11:14
两个文件都换了cp936还是不可以     另外 我是mac系统的  咋回事呢?

mac的话就是utf-8,改cp936反而就不对了。
试试从mac终端之间执行行不行,如果还不行,那可能就不是字符问题,要调试下代码,print看看过程中的值到底是什么,哪里出了问题
作者: shisidao    时间: 2016-2-20 17:37
我是win7的,这好像还是解析不了?
1.JPG

还有哦,那个之前的网址好像已经更新过了,输入上海的天气已经是这种地址了
http://www.weather.com.cn/weather1d/101020100.shtml#input
和之前的不一样了
http://www.weather.com.cn/data/cityinfo/101010100.html

是要相应改的吧?
作者: crossin先生    时间: 2016-2-21 11:05
shisidao 发表于 2016-2-20 17:37
我是win7的,这好像还是解析不了?

看一下city.py里面指定的编码。开头一行也把编码改成cp936

地址要更新的,参见查天气(1)帖子开头的说明
http://bbs.crossincode.com/forum.php?mod=viewthread&tid=8
作者: Kunz    时间: 2016-2-27 15:50
这个怎么弄啊??查了好多也没有查到解决办法

QQ图片20160227154837.png (56.72 KB, 下载次数: 442)

QQ图片20160227154837.png

QQ图片20160227154855.png (60.65 KB, 下载次数: 432)

QQ图片20160227154855.png


作者: crossin先生    时间: 2016-2-27 21:22
Kunz 发表于 2016-2-27 15:50
这个怎么弄啊??查了好多也没有查到解决办法

decode去掉,或者里面的参数换成utf-8或gbk,分别都试下
作者: Kunz    时间: 2016-2-28 08:16
去掉decode后输出为
b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00\xabVJI-NV\xb2R\xca\xcc+\xcb\xccIL\xd1M\xce,\xa9\xccN\xadT\xd2Q*.I,)-V\xb22400\xaa\x05\x00\x83\xc8\xca\\(\x00\x00\x00'
换成utf-8和gbk都不行
作者: crossin先生    时间: 2016-2-28 15:37
Kunz 发表于 2016-2-27 15:50
这个怎么弄啊??查了好多也没有查到解决办法

看了下,这个网站是自己在内容上做了gzip压缩,所以你拿到的压缩过的内容,需要做一步解压。参考代码:
  1. from StringIO import StringIO
  2. import gzip
  3. import urllib2

  4. request = urllib2.Request('http://outofmemory.cn/')
  5. request.add_header('Accept-encoding', 'gzip')
  6. response = urllib2.urlopen(request)
  7. if response.info().get('Content-Encoding') == 'gzip':
  8.     buf = StringIO( response.read())
  9.     f = gzip.GzipFile(fileobj=buf)
  10.     data = f.read()
复制代码





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