使用BeautifulSoup爬虫时CSV写入卢比符号遇Unicode编码错误
解决BeautifulSoup爬取后写入CSV的卢比符号编码错误问题
嘿,这个编码坑我之前踩过好几次!控制台能正常显示是因为你的终端已经配置了支持Unicode的编码(比如UTF-8),但写入CSV时没指定正确的编码,导致默认用了ASCII(不支持卢比符号这类特殊Unicode字符),就触发了UnicodeEncodeError。下面给你几个靠谱的解决办法:
方法一:打开CSV文件时指定UTF-8编码(推荐用utf-8-sig)
不管你用Python内置的csv模块还是直接写文件,打开文件时一定要显式指定encoding='utf-8-sig',而不是默认编码。utf-8-sig比普通utf-8更友好,能避免Windows下Excel打开CSV时出现乱码的问题。
用csv模块的示例代码:
import csv from bs4 import BeautifulSoup # 假设你已经通过BeautifulSoup提取到了价格数据 extracted_price = '₹ 10000' # 正确写入CSV的方式 with open('product_prices.csv', 'w', newline='', encoding='utf-8-sig') as csv_file: writer = csv.writer(csv_file) # 写入表头 writer.writerow(['Product Price']) # 写入含卢比符号的价格 writer.writerow([extracted_price])
用pandas写入的示例(如果用pandas处理数据):
如果你习惯用pandas来整理爬取的数据,只需要在to_csv方法里指定编码:
import pandas as pd # 假设data是包含价格列的DataFrame data = pd.DataFrame({'Price': ['₹ 10000', '₹ 5000']}) data.to_csv('prices.csv', encoding='utf-8-sig', index=False)
方法二:确认字符串本身的编码没问题
有时候爬取到的字符串可能有编码混淆,你可以先把它转换为标准的Unicode字符串(Python 3里默认就是Unicode字符串,所以这个步骤可能不是必须,但遇到特殊情况可以试试):
# 假设raw_price是从网页提取的原始字符串 raw_price = soup.find('span', class_='price').text # 确保是干净的Unicode格式 clean_price = raw_price.strip()
为什么控制台能显示但文件不行?
控制台(终端)现在大多默认用UTF-8编码,能识别卢比符号₹(Unicode U+20B9),但当你写入文件时,如果没指定编码,Python会用系统默认编码(Windows下通常是gbk,不支持这个符号),所以就报错了。指定UTF-8编码后,就能正确写入所有Unicode字符了。
内容的提问来源于stack exchange,提问作者venkat s
相关产品推荐
相关产品推荐

