也谈Python输出中文的问题

某博正是坑人不倦啊

最近在爬取新浪微博的数据,虽然网上有了很多相关的资料,但部分已经随着新浪微博的更新而过时了。具体踩得坑以后再谈,这次主要是说说遇到的Python编码问题。

在爬取数据时,发现页面打印只能输出Unicode编码。为了这个可以说折腾了30个小时,先是各种编码解码的学习,然而并不能解决问题。后来又想用Selenium来模拟登录和抓取,但是其稳定性实在够呛。最后只有死磕新浪微博的输出了,关于具体的Python 编码解码和输出中文问题自行谷歌百度吧,我就不再重复叙述了。

新浪微博爬取到的页面内容是直接以Unicode编码显示的,也就是说页面端即使有了“char set utf-8”,我们却看不到中文内容,得到的其实是str格式的unicode编码内容。

我当时以为只要直接以“utf-8”将内容解码为unicode格式再以“utf-8”编码就可以显示中文,这样想的我果然还是太年轻了。在尝试了各种编码解码后,已经是5小时后了吧。在关于Python的中文输出帖子里完全没有看到任何关于这方面的内容,后来在知乎上看到了解决办法,总算能输出中文了。

具体的办法有两个:
第一个办法(推荐)

1
str(xx).decode("unicode_escape")

第二个办法

1
2
3
4
5
def zhprint(obj):
import re
print re.sub(r"\\u([a-f0-9]{4})", lambda mg: unichr(int(mg.group(1), 16)), obj.__repr__())
zhprint(unicode content)

可能使用Python 3也能解决吧,目前没有尝试。关于具体的微博爬取教程会在后续几天完善代码后发出来。

If you like my article, please feel free to donate!