py 爬中文网页,总是遭遇 UnicodeEncodeError

2015-01-17 17:12:01 +08:00
 KyL

觉得《码农周刊》挺有意思的,想写个脚本把内容抓下来。

import urllib
import httplib
def get_html_content(url):
    response = urllib.urlopen(url)
    html = response.read()
    print type(html)
    return html


if __name__ == '__main__':
    url = 'http://weekly.manong.io/issues/58'
    html = get_html_content(url)
    print html.decode('utf-8')

结果报错误

<type 'str'>
Traceback (most recent call last):
  File "E:\src\infra.py", line 32, in <module>
    print html.decode('utf-8')
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201c' in position 44: ordinal not in range(128)
[Finished in 1.6s]

我真的查了许多,像是http://nedbatchelder.com/text/unipain.html 通读一遍,结果怎么都搞不定,求解。

6414 次点击
所在节点    Python
24 条回复
KyL
2015-01-20 17:40:08 +08:00
@Sylv 多谢
KyL
2015-02-01 18:14:14 +08:00
@aaaa007cn 为什么在cmd中使用gb18030是正确的呢。sys.stdout.encoding得到的结果是cp936,可是html.decode('utf-8').encode('cp936')报错。
aaaa007cn
2015-02-01 18:47:21 +08:00
https://en.wikipedia.org/wiki/Code_page_936
https://en.wikipedia.org/wiki/GB_2312
https://en.wikipedia.org/wiki/GBK
https://en.wikipedia.org/wiki/GB_18030
https://docs.python.org/2/library/codecs.html

gb2312 收录 6763 个汉字
gbk 收录 20900 多汉字
gb18030 收录 70244 个汉字
python2 中 cp936 是 gbk 的别名
所以有时候 encode("cp936") 会出错
一般在中文 windows 的 cmd 中用 python2 输出中文都是 encode("gb18030") 的
KyL
2015-02-01 22:05:14 +08:00
@aaaa007cn 谢谢

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

https://tanronggui.xyz/t/163012

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

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

© 2021 V2EX