[python3 - TroubleShooting] requests爬取中文网站后直接print,以及保存csv乱码

问题:

  • page = requests.get().text返回的中文不管是直接print,还是保存进csv都出现了乱码

背景:

  • 我爬取的网站head里定义了charset=utf-8
  • 本地windows系统默认编码是gbk

尝试:

  1. 直接print page; 写入csv文件的时候, 不指定编码
    • writerow()报错 -UnicodeEncodeError: 'gbk' codec can't encode character '\xe6' in position 0: illegal multibyte sequence
  2. 直接print page; 写入csv文件的时候,encoding='gbk'
    • 报错同上
  3. 直接print page; 写入csv文件时,encoding='utf-8'
    • print/csv乱码1
  4. page.encode('utf-8').decode('gbk') - 对page进行utf-8编码后用gbk解码
    • print/csv乱码1
  5. page.encode('gbk','ignore').decode('gbk');写入csv时,encoding='gbk' - 对page进行gbk编码后用gbk解码
    • print/csv乱码2
  6. page.encode('gbk','ignore').decode('gbk');写入csv时,encoding='utf-8' - 对page进行gbk编码后用gbk解码
    • print乱码2/csv乱码3
  7. page.encode(resquests.get().encoding).decode('gbk'); 写入csv时,encoding='utf-8'
    • print正常显示/csv乱码4
  8. page.encode(resquests.get().encoding).decode('gbk'); 写入csv时,encoding='gbk'
    • 都正常显示
  9. page.encode(resquests.get().encoding).decode('gbk'); 写入csv时,不指定编码
    • 都正常显示

结论:

  • 不要自己想网页是用什么编码,直接用requests.get()返回的编码,我这个例子中的网站其实用的是ISO-8859-1编码。。。
  • csv写入的时候,默认编码就是windows的编码,也就是说一般中文系统的电脑,要写入中文的话,不需要指定encoding

相关推荐