Python爬取知乎发现页UnicodeEncodeError

问题描述

在爬取知乎发现页时,使用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'的这个错误。

出现这个问题的原因可能是文件的编码格式问题,按照网络上文章尝试对写入数据进行,encodedecode各种编码转换,仍然报错。

也有文章指出可能是文件本身的问题。也就是需要注意以下三个编码:

  1. python脚本文件本身的编码和代码行中的#encoding='xxx'相统一。
  2. 网络数据流的编码就是网页的编码。写入需要使用decode解码成unicode编码。
  3. 将网络数据流写入到新文件中,需要指定新文件的编码与网路数据流的编码统一。
    Python open()创建写文件时,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)    

参考网站&文章

Python UnicodeEncodeError–脚本之家

Python写入文件指定编码格式

python中的encode()和decode()函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值