Tag Archives: urllib2

urllib2.urlopen处理gzip数据

某些网站不管的请求头部带不带 Accept-Encoding:gzip 他都返回gzip压缩过的内容,也就是返回的头部都带有 Content-Encoding:gzip 对于这种网站在使用urllib2.urlopen获取数据时候由于urlopen不会自动处理gzip,得到的都是乱码,让人难以看懂的内容 对付这种情况就需要我们单独处理 f = urllib2.urlopen(url) headers = f.info() rawdata = f.read() if (‘Content-Encoding’ in headers and headers['Content-Encoding']) or \ (‘content-encoding’ in headers and headers['content-encoding']): import gzip import StringIO data = StringIO.StringIO(rawdata) gz = gzip.GzipFile(fileobj=data) rawdata = … Continue reading

Posted in Python | Tagged | Leave a comment

urllib2.urlopen方法的url中文编码问题

在urllib2.urlopen的文档中并没有提及url编码的问题,但实际使用中肯定会发现当url包含中文时会有编码异常 在实验多次之后发现只需要将传入urlopen的url编码为utf-8即可,不能是unicode哦,也不需要再做unquote处理

Posted in Python | Tagged | Leave a comment

urllib2.urlopen超时的问题

urlopen方法在Python 2.6之前是没有timeout参数的,只能通过全局的socket超时设置,2.6之后增加了timeoute参数。 我在Mac下使用自带的Python 2.6的urlopen,没有设置timeout参数,结果在网络环境不好的情况下,时常出现read()方法没有任何反应的问题,程序卡死在read()方法里,搞了大半天,才找到问题,给urlopen加上timeout就ok了,设置了timeout之后超时之后read超时的时候会抛出socket.timeout异常 不知道其它版本有没有这个问题,还只是2.6的问题 想要程序稳定还需要给urlopen加上异常处理,再加上出现异常重试,程序就完美了。 代码: [python] fails = 0 while True: try: if fails >= 3: break f = urllib2.urlopen(url,timeout=20) page = f.read().decode(‘gbk’) except: fails += 1 else: break [/python]

Posted in Python | Tagged , , | Leave a comment