本人在爬取数据,准备写入csv时,报了这样一个错:
error:
UnicodeEncodeError: 'gbk' codec can't encode character 'xa0' in position xx: illegal multibyte sequence
报错关键词:gbk、xa0
报错原因请参考这篇文章:UnicodeEncodeError报错原因,上面讲得很详细(虽然我用了文章说的方法并没有解决问题,还需要一个步骤,即我文中的第二步),原因简单说就是:前端的 的转换编码后遗症问题(粗略理解的话)
需要注意三个地方以避免此问题:
- 从requests中获取的编码设定:
r.encoding = r.apparent_encoding
- 打开
csv
文件时的编码设定为:
with open("E:/=My learning record/myEssay/result/myEssayData.csv", "w",newline='',encoding='utf-8-sig') as csvfile:
# "E:/=My learning record/myEssay/result/myEssayData.csv" 存储路径
# newline='' :否则写入一行后会有空行
# encoding='utf-8-sig':否则会出现下图的乱码:
![d8198fd1f18b9e4dc3247a8c0abcdce2.png](https://img-blog.csdnimg.cn/img_convert/d8198fd1f18b9e4dc3247a8c0abcdce2.png)
- 将需要写入
csv
的字符串中的'xa0'
替换成空格
# 先写入首行
writer.writerow(["爬取的具体时刻", "彼时榜单"])
writer.writerow(["",j.replace(u'xa0 ', u' ')])
#这是逐行写入,所呈现出来的就是这样的效果:
![6f4a1a895579a971526897523a59814c.png](https://img-blog.csdnimg.cn/img_convert/6f4a1a895579a971526897523a59814c.png)
紫色圆框圈出来的就是之前报错的地方 对应的其实就是前端的