urllib2和urllib3是并存关系还是that代替关系副词

urllib2获取网页信息时的中文编码 - ITeye问答
请问用urllib2.open()获取网页信息的时候,中文不能显示,怎么解决?网上搜索了一些没搞定,请教一下
out[4] =
'&&& &meta name="keyword" content="JavaEye,IT,\xe5\xbc\x80\xe5\x8f\x91,\xe4\xba\xa4\xe6\xb5\x81,\xe7\xa4\xbe\xe5\x8c\xba,java, ruby, ajax, agile" /&\n'
都是这种显示,不知道怎么解决,谢谢
问题补充:RyanPoy 写道这个编码是正确的,看着是gbk编码。估计你是终端设置的字符集不对。
& 能否解释详细点,终端字符集怎么设置?谢谢
问题补充:在win下面, 抱歉, 我也不知道.
如果你是用的win, 那么, 你这样子试试看: print out[4].decode('utf-8').encode('gbk')
你好啊,我是在win下,这样打印出中文了,谢谢,我之前试过,但是不用print就还是乱码。。分给你了,非常谢谢,额外希望问两个问题
我搜索了下,有个这个报错,再向你请教一下,谢谢
a = '专业技术人员提供最全面的信息传播和服务平台'
for i in out1:
...&&&& if a.decode('utf-8').encode('gbk') in i.decode('utf-8').encode('gbk'):
...&&&&&&&& print i.decode('utf-8').encode('gbk')
搜索到了,但是有个报错,Traceback (most recent call last):
& File "&interactive input&", line 2, in &module&
UnicodeEncodeError: 'gbk' codec can't encode character u'\xa9' in position 31: illegal multibyte sequence
还有一个,这种抓取网页以前没弄过,有什么小技巧没,就觉得一下抓过来存储消耗的资源有点大啊,要是你也考虑过,请教下,谢谢
采纳的答案
首先, 道个歉. 原因是昨天手快, 敲错了. 这个字体是: utf8的. 不是gbk的.
然后, 终端字符集是和系统相关的.
在bsd下面, csh, 修改 .cshrc:
setenv& LANG&&& zh_CN.UTF-8
在linux下面, bash, 修改 .bashrc:
export LANG="zh_CN.UTF-8"
在mac下面, bash, 修改 .bash_profile:
export LANG="zh_CN.UTF-8"
在win下面, 抱歉, 我也不知道.
如果你是用的win, 那么, 你这样子试试看: print out[4].decode('utf-8').encode('gbk')
这个编码是正确的,看着是gbk编码。估计你是终端设置的字符集不对。
已解决问题
未解决问题Python urllib2的使用点滴: cookie, https, put, 500/403的处理
作者:半瓶墨水 & 链接:/blog/python-urllib2-cookie-https-put-500-403/
Update @ , 13:46:08
刚刚发现了一个比urllib2更好用的库httplib2,可以比较简单的解决本文遇到的一些问题
————————————————————
最近用写了一个公司内部用的脚本
这个脚本要访问一个webservice,访问之前先要用https登陆拿到cookie再到另一个地方获取一个临时用的id
https登陆,获取cookie
首先是https登陆,这段很好写,以前,轻车熟路,用cookielib的CookieJar加上HTTPCookieProcessor搞定,代码如下(其中那个超简单的lambda hack简直绝了:
#! /usr/bin/env python # -*- coding: utf-8 -*- import urllib, urllib2, sys, cookielib, re, os, json
cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) url_login = '/login/' body = (('username', '半瓶墨水'), &&&&&&& ('password', '密码'), &&&&&&& ('action', 'login'),)
print 'login to get cookies' opener.open(url_login, urllib.urlencode(body))
处理HTTP 403/500 Exception
但是后面用cookie去拿id的时候,就老是告诉我403错误,然后opener就抛异常,想问题想到头大,后来发现这个服务访问成功不是返回200,而是403,所以看到403的时候不要管他,直接看body内容就行了,日,不知道为什么这么设计。
怎么办呢?查了一下urllib2的文档,发现可以继承一下HTTPCookieProcessor,自己做了一个NoExceptionCookieProcesser,后来的过程中发现webservice有时候返回400和500的时候body中包含有用的信息,一并处理了:
#! /usr/bin/env python # -*- coding: utf-8 -*- import urllib, urllib2, sys, cookielib, re, os, json #suppress the 403/400/500 exception and return the body class NoExceptionCookieProcesser(urllib2.HTTPCookieProcessor): & def http_error_403(self, req, fp, code, msg, hdrs):
&&& return fp & def http_error_400(self, req, fp, code, msg, hdrs):
&&& return fp & def http_error_500(self, req, fp, code, msg, hdrs):
&&& return fp &
cj = cookielib.CookieJar() opener = urllib2.build_opener(NoExceptionCookieProcesser(cj)) url_login = '/login/' body = (('username', '半瓶墨水'), &&&&&&& ('password', '密码'), &&&&&&& ('action', 'login'),)
print 'login to get cookies' opener.open(url_login, urllib.urlencode(body))
urllib2中用PUT进行请求
然后又发现一个问题,webservice在提交的时候要求用PUT方式,并且只接受json,urllib2默认只支持GET和POST,Google了一下,发现可以创建Request对象,然后更改它的请求方法(get_method)以及header,搞定:
request = urllib2.Request(url_ws, data=&blablabla&) request.add_header('Content-Type', 'application/json') request.add_header('Accept', 'application/json') request.get_method = lambda: 'PUT' result = opener.open(request).read().strip()
Simple New Line Converter – CRLN DOSUNIX,换行符替换工具脚本
26.8K次点击 |
号,星期六 at 10:31 下午 | ,噢~哟~哟o-u-u ——每天进步一点点,it,网络,知识积累,总结分享,o-,噢哟哟
免费10GB空间+免费10GB/月流量
免费CDN加速
© 2015}

我要回帖

更多关于 urllib2.request 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信