[求助]用 urllib2 抓取到的一个页面出现了惨不忍睹的编码,我该怎么做?

2014-01-28 20:37:02 +08:00
 larryzh
页面是这个:
http://sports.sina.com.cn/g/premierleague/index.shtml

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

输出:
��wױ8�3�����'͠�L/�J
���.u�Vխ�[w�5��;:�S��煝{7l��!�Z����p8�'-��y϶���=e�P�Usł��;��__�Zj
�::������]�K��챵��
e�Y�ڕkV���%I���B��U�VY�"���*')��ڤ��S.�
��JT�>"T�T�Zk+�!x��*)l�d2I�����,��kUU�ҭ�/k�����X�j�jk�HI� ��U���0�n2}j��US�ݲ"�>!�p��j^[����LJg�'o^=�����Nq���ȕ7n|�57yy����'��\��ul
j���=�9T,g/��t�0�ݕ7�'^�������o�|v}>8=7�흯!��tp�����ٹˏgF�S��?�z��d���~�`�����M��u�C%�U2�\ �f���߉V��q�ߍ7�~2~��ɓ���lE������=}���M��}���X��w�o}u��s�'>?�*��zp����S�:���7Oݚ�~��ч�b����=��
HK!��s�عi�nQ����R��}@�TsY�|,�#b\d�+�#yM@qaR��TP�V�N�������w
��?[�((t�G���P��,�����A��$�O���/�E�XP�)���oN�gA����\�`�Z�������
��4
e�L7ȓVn+
Ʉ�e�R fT��`&WՂ�bV
f{
�j_p@-�@�[I�b�_ͷ��CZ����'!4�O1C�,�کhy b0W(ժ�Z��˨�V5��-���ټ�X)��5���{Ek����v��XÝN �(P�PU���Ck��ϫ��? ��j(�
�V3{��Z!��LOO�P+��L��P%WP���L!\=�! ���@X�D8ׯ�j�p�T,W+�#we~م ��{C�Bo@�_Y+ij��p;�^,�=�(��h� :�NxH�����|A�����r��]-���|��Bk�q<
ڻ�+}��.ܹl�t.�)�c�pt�RX���J4CJЃB��v@����B�X��d�P&�����6��dó��gs�R^=�/f���b�@�����s�#m} uZ���h�.V�80_)��$.1W�
h��S��*z�Q��J��Ñ��|��ă{�n�I�P����a±a#ن��L<���SA
%���^y�g2���*�\�f�xJ���h�Q�h_�F��BK���(c��%c��BKw���aH��eRB� ��8�w�6��<�Ͼ���K�� ���@.��k�*[����k�|^�_�¹BV;��,���p�u�]2�4��Y�
�B��wԢ���C�m�3`��>5���#FzF�G-%�Ũ
W��������0A�{�TȪ�#���u�4��@e��24�߈���*�:*�6Ђt&��XGe�@dc�%�cເ�h�|΀�y�����$Hh��Gv�3�s$(Y)�sY�M��v�E@l�C(��.�tk��ب�6�K��(�E;�Op1?:
D�����6�wОƘfO&�����zq�Z3Z>�����0�M�C��{�ڟ�i#.��
tPڻu�-�u�-�t3�8�X W���t2h�!�.>9;TVK��r�j_��$�yAB�Z�Ȋ�6���.ƭ��I��\y�K:¬
s��#lh��sx�zb=I��Nse�/��FUad�4�H3�l�n�Ho0T�^"j�*�]y�fr�MY!���׋��-#I�(�YVaΡ@���1kE뗴����2=qRt�ۈ��h@y�@�(GX)�I-Z�$l�NX�,����vg��^~�cE��
/虬&j�z����=АUd��Y��_���_�\FG����A}

编码问题参考了 http://in355hz.iteye.com/blog/1860787 ,感觉基本明白怎么回事儿了,按理说

isinstance(html, str) == True

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

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

就应该解决问题的,可是收到这样的提示:

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

我也试过其它的网站,就新浪会抓到这些鬼东西,这些是 gzip 以后的东西吗?我还有什么没有做,应该怎么办呢?
10640 次点击
所在节点    Python
21 条回复
dingyaguang117
2014-02-06 15:53:08 +08:00
目测应该是 gzip 或者其他方式压缩,按理说你没有上传 accept-encoding 服务器不应该给你压缩的,不过有的就是这么不遵循规则。

解压之后decode依然可以会有问题,decode('gbk','ignore') 就好了 ,是部分编码解析不了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/98597

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX