python2 爬虫怎么处理字符串编码? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ZenZen
V2EX    Python

python2 爬虫怎么处理字符串编码?

  •  
  •   ZenZen 2015-10-10 17:15:53 +08:00 3818 次点击
    这是一个创建于 3662 天前的主题,其中的信息可能已经有所发展或是发生改变。


    import urllib2
    s = urllib2.urlopen('http://www.zhihu.com').read()
    s.decode('utf-8','ignore')

    输出在 windows cmd 和 ubuntu 下面都是乱码,如\u89c1 等等

    14 条回复    2015-10-15 22:15:50 +08:00
    lixia625
        1
    lixia625  
       2015-10-10 17:20:56 +08:00 via Android
    使用 python3
    233333...
    Tink
        2
    Tink  
    PRO
       2015-10-10 17:24:04 +08:00 via iPhone
    这不是乱码,你在转一次啊
    jessynt
        3
    jessynt  
       2015-10-10 17:25:57 +08:00
    #coding:utf-8
    1.最前面加上这段
    2.查看文件编码是不是 Utf-8
    3.查看网页编码
    另外:建议使用 Requests 来做爬虫,或者如楼上所说,使用 Python3
    binux
        4
    binux  
       2015-10-10 17:26:06 +08:00
    你需要先去了解下什么是编码,编码不只在 decode 除发生,在输出时也会涉及编码
    binux
        5
    binux  
       2015-10-10 17:36:27 +08:00   3
    1 、所有教你加 coding:utf-8 ,改文件编码的,都是取网上抄代码,不理解为什么的。这两个只影响源代码里面的中文如何解码的问题,源代码里不带或不使用源代码中的字符串,这个设定是没有用的。
    2 、我们说,要三码合一,或者三码对应,就是,输入编码,程序(内存)内编码,输出编码;要分别与输入,程序,输出环境编码对应。
    3 、最后,你这个根本不是乱码,只是你输出的不是文字的「字面意」而是字符串「表达式」(represent)
    tonic
        6
    tonic  
       2015-10-10 17:38:21 +08:00
    @binux 宽神好赞! 已经不止一次科普过...
    rungo
        7
    rungo  
       2015-10-10 17:42:08 +08:00
    print s.decode('utf-8','ignore')
    glasslion
        8
    glasslion  
       2015-10-10 17:59:01 +08:00
    btw, windows cmd 下的乱码 可能更不不是 python 的问题, windows 没有一个代码页是支持 utf-8 的
    n6DD1A640
        9
    n6DD1A640  
       2015-10-10 17:59:14 +08:00
    +1024 用 python 3
    Delbert
        10
    Delbert  
       2015-10-11 08:27:57 +08:00 via Android
    Windows cmd 的 code page 是 cp936 ,输出再 encode 为 gkb 就好,不清楚 Ubuntu 的 terminal 是啥编码
    zog
        11
    zog  
       2015-10-14 15:37:34 +08:00
    import urllib2
    s = urllib2.urlopen('http://www.zhihu.com').read()
    print(s) ---->str
    a = tye(s.decode('utf-8','ignore')) -->unicode

    print s
    你看看那是不是乱码了?不是了吧。交互环境下调用的是__repr__()。尝试比较 print s.__repr__()和 s.__str__()。
    zog
        12
    zog  
       2015-10-14 15:41:46 +08:00
    建议补充交互式环境下输出知识, repr 函数, str 函数,以及什么是 unicode ,什么是 utf8 。
    a358003542
        13
    a358003542  
       2015-10-15 22:14:19 +08:00
    题主的意思主要是指终端显示那块,这个主要参考一下两个网页:

    https://docs.python.org/3.4/howto/unicode.html

    http://stackoverflow.com/questions/10569438/how-to-print-unicode-character-in-python

    我因为对终端具体打印效果不太关心,了解这个问题,但从来没有实际解决过。楼主如果有兴趣,可以看到 wikipedia 这个项目, util 里面就有这个函数:

    # from http://stackoverflow.com/questions/3627793/best-output-type-and-encoding-practices-for-repr-functions
    def stdout_encode(u, default='UTF8'):
    encoding = sys.stdout.encoding or default
    if sys.version_info > (3, 0):
    return u.encode(encoding).decode(encoding)
    return u.encode(encoding)
    a358003542
        14
    a358003542  
       2015-10-15 22:15:50 +08:00
    ```python
    def test():
    pass
    ```

    这网站还不支持代码显示?又不是什么难问题。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2787 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 13:41 PVG 21:41 LAX 06:41 JFK 09:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86