Python 2.7+BeautifulSoup爬取非ASCII字符:去除€或提取非ASCII字符
解决Python 2.7 Windows环境下BeautifulSoup爬取欧元符号的处理与打印问题
嘿,我来帮你搞定这个问题!在Python2.7的Windows环境里,处理非ASCII字符确实容易踩编码坑,我分两部分给你解决方案:
一、提取目标数字文本(移除欧元符号)
这里有几种简单可靠的方法,你可以根据需求选择:
方法1:直接字符串替换(最直观)
先把爬取到的字符串转成unicode类型(Python2里一定要注意区分str和unicode),然后替换掉欧元符号:
# 替换成你实际的BeautifulSoup提取代码 raw_text = item.find_all(...)[0].text # 假设网页编码是UTF-8,根据实际页面编码调整解码方式 unicode_text = raw_text.decode('utf-8') # 移除欧元符号和后面的空格,得到纯数字文本 cleaned_text = unicode_text.replace(u'€ ', u'')
方法2:正则表达式提取数字部分
如果担心欧元符号的位置或格式有变化,用正则匹配数字和逗号更稳妥:
import re raw_text = item.find_all(...)[0].text unicode_text = raw_text.decode('utf-8') # 匹配所有包含数字和逗号的片段,取第一个结果 cleaned_text = re.findall(r'[\d,]+', unicode_text)[0]
方法3:过滤允许的字符
只保留数字和逗号,自动排除其他符号:
raw_text = item.find_all(...)[0].text unicode_text = raw_text.decode('utf-8') # 筛选出数字和逗号字符 cleaned_text = ''.join(c for c in unicode_text if c.isdecimal() or c == ',')
二、解决Windows控制台打印非ASCII字符报错问题
Windows默认控制台编码是GBK,欧元符号不在GBK编码范围内,直接打印会报错,试试这几个方案:
方案1:编码转换时忽略/替换无法显示的字符
把unicode文本转成GBK编码,遇到无法编码的字符直接忽略或替换:
# 忽略无法编码的字符 print(cleaned_text.encode('gbk', 'ignore')) # 把无法编码的字符替换成问号 print(cleaned_text.encode('gbk', 'replace'))
方案2:切换控制台编码为UTF-8
- 先在CMD窗口执行命令:
chcp 65001(设置控制台代码页为UTF-8) - 然后在Python代码里用UTF-8编码输出:
import sys sys.stdout.write(cleaned_text.encode('utf-8') + '\n')
方案3:使用第三方库支持Unicode打印
安装win_unicode_console库,它能让Windows控制台直接支持Unicode输出:
- 安装命令:
pip install win_unicode_console - 代码开头导入并启用:
import win_unicode_console win_unicode_console.enable() # 之后直接打印unicode字符串就不会报错了 print(cleaned_text)
内容的提问来源于stack exchange,提问作者Stephinext
相关产品推荐
相关产品推荐

