问题描述
在爬取知乎发现页时,使用requests
获取HTML文本,使用XPath
筛选信息,用列表存储有效信息。使用write()
新建txt文件,用于存储信息。
在向txt文件写入信息的过程中,出现错误:UnicodeEncodeError: 'gbk' codec can't encode character '\uff65'....
错误代码再现
html = ''
data_list = []
with open('filename.txt','wt') as file:
for data in data_list:
file.write(data)
>>>UnicodeEncodeError: 'gbk' codec can't encode character '\uff65'
问题分析
使用Python写文件,或者将网络数据流写入本地文件时,大部分情况下会遇到UnicodeEncodeError: 'gbk' codec can't encode character '\uff65'
的这个错误。
出现这个问题的原因可能是文件的编码格式问题,按照网络上文章尝试对写入数据进行,encode
和decode
各种编码转换,仍然报错。
也有文章指出可能是文件本身的问题。也就是需要注意以下三个编码:
- python脚本文件本身的编码和代码行中的
#encoding='xxx'
相统一。 - 网络数据流的编码就是网页的编码。写入需要使用
decode
解码成unicode
编码。 - 将网络数据流写入到新文件中,需要指定新文件的编码与网路数据流的编码统一。
Pythonopen()
创建写文件时,encoding
参数默认为None
。但进过实测有中文写入时创建的文件编码格式为GB2312
。
解决方法
知乎网页的编码格式为utf-8
,那么在新建写文件的时候指定编码为utf-8
。
示例代码
html, data_list ='', []
with open('filename.txt','wt',encoding='utf-8') as file:
for data in data_list:
file.write(data)