Scrapy爬虫框架抓取中文结果为Unicode编码,如何转换UTF-8编码

Sp00f
  • 137

关于Python的编码一直是一个痛……半夜研究Scrapy的时候抓取了一下内容,抓取了一些中文内容。都是\u5173\u4e8e的Unicode编码。
我想将取得的内容转成UTF-8正常的显示中文应该怎么做?在Scrapy看得有点晕,Python转编码还好。
表示Scrapy取的好像是list类型不能对该类型进行编码解码吧?
主要是我不知道怎么写这段代码的说……
另,假如我入库MySQL以charset='utf8'不知道会不会正常的转成中文UTF-8而不是Unicode?
查阅了不少资料,有点迷迷糊糊的没看懂,遂到SF问一下~
thanks~

回复
阅读 56.7k
11 个回答

问题很旧,旧版本的不知道怎么解决,但是对于现在版本的可以直接在setting文件中设置:FEED_EXPORT_ENCODING = 'utf-8'

tengyun
  • 1
新手上路,请多包涵

这个所说的list类型是个什么样子?list里面保存多行所抓取的字符串?那就直接for s in strs取出,encode()为utf-8再保存就行。
或者一个list就是一个抓取的字符串?可python的字符串本质也就是list啊。"".join()试试

FindiX
  • 1
新手上路,请多包涵

建议先去弄清楚unicode、UTF、UCS

DonnieGo
  • 2
新手上路,请多包涵
for line in list:
    line = unicode(line,"UTF-8")
    #do something.. 

这样应该可以把。

我最近用结巴分词也遇到过类似问题,然后上网查最后这样解决的(不过我是中文写入文件的数据库会不会不一样就不知道了):
1.如 @tengyun 所言,对于要输出的元素 a.encode('utf-8')
2.并且在程序的开头加encoding & 重载sys。。。

#encoding=utf-8
import sys
reload(sys)
sys.setdaulftencoding('utf-8')

题主还是先搞明白unicode和utf-8是什么关系吧。

List类型你也是要一个一个item地插入数据库,只要对每个item都进行转码操作即可,例如
for ii in itemlist: str = ii.encode('utf-8')
更多scrapy相关的内容,可以看看这个博客,http://tech.my-coffees.com

jusme
  • 1
新手上路,请多包涵

为了大家不再百度找答案。这里放上答案:
str=json.dumps(dict(item),ensure_ascii=False)+"\n";
str=unicode.encode(str,'utf-8');

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏