[python3 - TroubleShooting] requests爬取中文网站后直接print,以及保存csv乱码
问题:
- page = requests.get().text返回的中文不管是直接print,还是保存进csv都出现了乱码
背景:
- 我爬取的网站head里定义了charset=utf-8
- 本地windows系统默认编码是gbk
尝试:
- 直接print page; 写入csv文件的时候, 不指定编码
- writerow()报错 - UnicodeEncodeError: 'gbk' codec can't encode character '\xe6' in position 0: illegal multibyte sequence
- 直接print page; 写入csv文件的时候,encoding='gbk'
- 报错同上
- 直接print page; 写入csv文件时,encoding='utf-8'
- print/csv乱码1
- page.encode('utf-8').decode('gbk') - 对page进行utf-8编码后用gbk解码
- print/csv乱码1
- page.encode('gbk','ignore').decode('gbk');写入csv时,encoding='gbk' - 对page进行gbk编码后用gbk解码
- print/csv乱码2
- page.encode('gbk','ignore').decode('gbk');写入csv时,encoding='utf-8' - 对page进行gbk编码后用gbk解码
- print乱码2/csv乱码3
- page.encode(resquests.get().encoding).decode('gbk'); 写入csv时,encoding='utf-8'
- print正常显示/csv乱码4
- page.encode(resquests.get().encoding).decode('gbk'); 写入csv时,encoding='gbk'
- 都正常显示
- page.encode(resquests.get().encoding).decode('gbk'); 写入csv时,不指定编码
- 都正常显示
结论:
- 不要自己想网页是用什么编码,直接用requests.get()返回的编码,我这个例子中的网站其实用的是ISO-8859-1编码。。。
- csv写入的时候,默认编码就是windows的编码,也就是说一般中文系统的电脑,要写入中文的话,不需要指定encoding