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

使用BeautifulSoup进行网页爬虫时如何处理UTF-8编码报错问题

错误原因

该UnicodeEncodeError报错不属于爬取或BeautifulSoup解析环节的问题,是Windows系统终端默认使用GBK(charmap)编码,打印输出时无法识别网页中包含的特殊Unicode字符(报错信息中的\u2605对应五角星符号)导致的。该错误仅在打印内容到终端时触发,不影响BeautifulSoup对象的查找、数据提取操作。
你之前将stats_page直接encode为UTF-8字节流的操作,会把BeautifulSoup对象转为无DOM操作方法的字节类型,自然无法调用findAll方法,属于错误的绕过方式。
你核心的爬取、解析、查找表格行代码本身完全正确,不需要调整,仅需处理打印输出环节的编码兼容即可。

解决方案

  • 方案1:仅修改打印逻辑,不影响原有数据处理流程
    打印时对输出内容做编码兼容,忽略无法识别的特殊字符即可,修改后完整代码如下:

    import pandas as pd 
    import numpy as np 
    from bs4 import BeautifulSoup
    import requests
    
    r = requests.get("https://www.playerprofiler.com/nfl/george-kittle").text
    stats_page = BeautifulSoup(r, 'lxml')
    column_headers_row = stats_page.findAll('tr')
    # 仅修改打印语句,兼容终端编码
    print(str(column_headers_row).encode('gbk', errors='ignore').decode('gbk'))
    
  • 方案2:全局修改Python输出编码,一劳永逸解决同类问题
    在代码最开头加入编码配置,指定Python标准输出使用UTF-8编码,后续所有打印操作都不需要额外处理:

    import sys
    import io
    # 全局配置输出编码为UTF-8
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
    
    import pandas as pd 
    import numpy as np 
    from bs4 import BeautifulSoup
    import requests
    
    r = requests.get("https://www.playerprofiler.com/nfl/george-kittle").text
    stats_page = BeautifulSoup(r, 'lxml')
    column_headers_row = stats_page.findAll('tr')
    # 直接正常打印即可
    print(column_headers_row)
    
  • 方案3:跳过打印环节直接处理数据
    如果你不需要将内容输出到终端,完全可以直接对column_headers_row做遍历、提取字段、存入表格等后续操作,不会触发编码报错。

内容的提问来源于stack exchange,提问作者sfaisal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:48:03