国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > Python基础教程 > python urllib2中文乱码怎么解决

python urllib2中文乱码怎么解决

头像

爱喝马黛茶的安东尼

2019-09-18 15:19:393355浏览 · 0收藏 · 0评论

很多乱码问题是编码造成的,一般对于中文网站基本是UTF-8,GB2312,可以GB18030通吃。

另一个造成乱码的原因是压缩格式,很多规模较大的网站都是以gzip的压缩格式输出页面的,所以在用BS解析之前需要先判断该网页是否经过压缩,如果经过压缩则先进行解压操作。

相关推荐:《Python教程

代码:

# coding: u8
import urllib2
url = "http://sports.sina.com.cn/g/premierleague/index.shtml"
response = urllib2.urlopen(url)
html = response.read()
print html

输出:

w?83’?L/J
.uV?[w5;:S煝{7l!Zp8′-y?=ePUs?;__Zj
::]K?
eY?kV%IBUVY”*’)?S.
JT>”TTZk+!x*)ld2I,kUU?/kXjjkHI U0n2}jUS?”>!pj^[?g’o^=Nq?7n|57yy’\ul
j=9T,g/t0?7’^o|v}>8=7?!tp??gFS?zd~`MuC%U2\ f?Vq?7~2~?lE=}M}Xwo}us’>?*zpS:7O?~чb=
HK!s?inQR}@TsY|,#b\d+#yM@qaRTPVNw
?[((tGP,A$O/EXP)oNgA\`Z
4
eL7?Vn+
?eR fT`&W?bV
f{
j_p@-@[Ib_?CZ’!4O1C,?hy b0W(?Z?V5-?X)5{EkvXYN (PPUCk?? j(
V3{Z!LOOP+LP%WPL!\=! @XD8?jpT,W+#we~? {CBo@_Y+ijp;^,=(h :NxH|Ar]-|Bkq<
?+}.?lt.)cptRXJ4CJ?Bv@BXdP&6dógsR^=/fb@s#m} uZh.V80_)$.1W
hS*zQJ?|?{nIPa±a#?L<SA
%^yg2*\fxJhQh_FBK(c%cBKwaHeRB 8w6<?K @.k*[k|^_1BV;,pu]24Y
Bw?Cm3`>5#FzFG-%?
W0A{T?#u4@e24?*:*6?t&XGe@dc%c?h|?y$HhGv3s$(Y)sYMvE@lC(.tk?6K(E;Op1?:
D6wО?fO&zqZ3Z>0MC{?i#.
tP?u-u-t38X Wt2h!.>9;TVKrj_$yABZ?6.?I\yK:¬
s#lhsxzb=INse/FUad4H3lnHo0T^”j*]yfrMY!?-#I(YVaΡ@1kE?2=qRt?h@y@(GX)I-Z$lNX,vg^~cE
/虬&jz=АUdY__\FGA} …

首先想到编码问题

isinstance(html, str) == True

并且页面的编码确定为 GBK,那么

html.decode('gbk').encode('utf-8')

就可以将机器码以 gbk 解码,再重新以 utf-8 编码,就可以得到正确的文本。可是收到这样的提示:

UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 1-2: illegal multibyte sequence

可能是以 gzip 压缩格式输出造成的乱码,于是尝试通过 zlib 解压缩。

import zlib
html = zlib.decompress(html)

可是却得到下面的错误:

zlib.error: Error -3 while decompressing data: incorrect header check

无奈,只得用 gzip 库和 StringIO 库绕路解决。

import gzip, StringIO
html = gzip.GzipFile(fileobj=StringIO.StringIO(html), mode="r")
html = html.read().decode('gbk').encode('utf-8’)

终于得到了正确的内容和正确的编码。

问题到这里就解决了,可是对于不能直接使用简洁的 zlib 库表示很不甘心,毕竟根据 python 的文档 gzip 库也是调用 zlib 来解压的,为什么不直接用 zlib 呢?最终代码如下:

request = urllib2.Request(url)
request.add_header('Accept-encoding', 'gzip')
opener = urllib2.build_opener()
response = opener.open(request)html = response.read()
gzipped = response.headers.get('Content-Encoding')
if gzipped:
    html = zlib.decompress(html, 16+zlib.MAX_WBITS)
print html

代码里在 request header 中默认加入了接受 gzip,服务器会优先返回 gzip 后的页面,这样极大减少数据流的大小,绝大多数服务器都是支持 gzip 的。之后对于意外情况,也加入了对 response header 的判断,对于不包含“Content-Encoding”的数据流就不会去对其解压缩。

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

《玉蒲团2之艳乳欲仙欲》| 姐妹花齐飞| 女生穿露胸开又裙穿搭大忌| 小蜜桃免费观看高清电视剧| 深圳英才网| 大肉蟒撑开稚嫩紧窄| 二人世界高清视频播放| 两个人轮流上24小时的班 | 迪拜的女孩| 黄金网站APP免费| 一晚上要了小姑娘三次| 土豆网| 搜酷| 《大尺度吃奶做爰》电影 | 同学的母亲中字ID| 士豆网视频| 韩国男按摩师吸乳房会得乳腺癌吗| 麻豆精品无码国产在线播放 | 两个人轮流上24小时的班| 美女比基尼游泳跳舞视频| 网红大赛| 瑶瑶被躁在卧室里被吸在线观看| 免费观看已满十八岁电视剧直播| 九九在线观看免费高清电视剧| 三人互换麦子| 朋友的妈妈| 久久久久久精品国产三级涨奶| 《为丈夫晋升的妻子》| 免费的行情网站WWW网页版| 我在公车被蹭水后当晚就来了月经| 小妈妈2免费观看完整电视剧| 蜜桃浏览器| 山行| 小正太主动要求戴肛塞尾巴的小猫| B站未过审的跳舞视频| 阴部按摩出水太尴尬怎么办| 水K内衣| 《黏糊糊的你》免费观看| 《不戴套瑜伽教练3》| 《巨大荫蒂》免费| 《性88分钟》