You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django用BeautifulSoup爬虫打印变量报UnicodeEncodeError解决方法

问题原因

抛出UnicodeEncodeError的核心原因是Windows环境下控制台默认使用GBK(charmap)编码输出内容,无法编码你抓取到的网页内容里夹带的\u200e(从左到右标记,是多语种网页常用的不可见双向控制字符),和Django、BeautifulSoup的功能逻辑无关,你没法打印、切片后报错本质都是碰到了这个无法被默认编码识别的特殊字符。

可直接落地的解决方法
  • 方案1:清理特殊不可见字符后再操作(最推荐,不影响后续业务逻辑)
    遍历内容时先把\u200e这类不可见控制字符移除,再做打印、切片处理即可,参考代码:
    import re
    # 匹配常见的网页不可见双向控制字符
    control_char_pattern = re.compile(r'[\u200e\u200f\u202a-\u202e]')
    
    for x in mylist:
        # 提取标签内纯文本,如果需要完整标签字符串就用str(x)
        raw_content = x.get_text(strip=True)
        # 清理特殊字符
        valid_content = control_char_pattern.sub('', raw_content)
        # 后续打印、切片都不会报错
        print(valid_content)
        print(valid_content[:10]) # 切片操作可正常执行
    
  • 方案2:强制Python标准输出使用UTF-8编码(适合临时调试场景)
    在views.py文件最顶部、导入其他依赖之前加如下代码,不用修改原有抓取逻辑:
    import sys
    import io
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
    
    也可以在启动Django服务前,在Windows终端执行命令临时指定Python输出编码,再启动服务:
    set PYTHONIOENCODING=utf-8
    python manage.py runserver
    
  • 方案3:避免直接打印BeautifulSoup的Tag对象
    你代码里直接print(x)打印的是完整的标签HTML结构,里面混杂的特殊字符更多,日常开发如果不需要标签结构,优先用.get_text()方法提取纯文本内容再处理,能减少很多编码类问题。

内容的提问来源于stack exchange,提问作者ahmet yılmaz234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 02:57:09