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

Python3获取网页源码时遇UnicodeEncodeError问题求助

解决Selenium获取IMDB页面时的UnicodeEncodeError问题

首先得说清楚:你遇到的这个UnicodeEncodeError根本不是page_source的获取问题——问题出在Windows控制台的默认编码限制!Windows命令行默认用cp1252编码,没法处理像\u25ec这类特殊Unicode字符,和你对page_source做utf-8编码没关系。下面给你几个实用的解决办法:

方法一:强制标准输出用UTF-8(Python 3.7+适用)

在代码开头加两行配置,让打印输出强制使用utf-8编码,之后正常打印就不会报错了:

from selenium import webdriver
from bs4 import BeautifulSoup
import sys

# 配置标准输出为utf-8编码
sys.stdout.reconfigure(encoding='utf-8')

driver = webdriver.Chrome(executable_path=r'C:\chromedriver_win32\chromedriver.exe')
driver.get('https://www.imdb.com/')
html_doc = driver.page_source
soup = BeautifulSoup(html_doc, 'lxml')
print(soup.prettify())
driver.quit()

方法二:把内容写入文件(最稳妥的方式)

控制台编码限制多,不如直接把格式化后的源码写入utf-8编码的文件,既保存了内容,又完全避开编码问题:

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.Chrome(executable_path=r'C:\chromedriver_win32\chromedriver.exe')
driver.get('https://www.imdb.com/')
html_doc = driver.page_source
soup = BeautifulSoup(html_doc, 'lxml')

# 将内容写入utf-8编码的本地文件
with open('imdb_formatted_source.html', 'w', encoding='utf-8') as file:
    file.write(soup.prettify())

driver.quit()

执行完直接打开生成的imdb_formatted_source.html文件,就能看到完整的格式化源码了。

方法三:打印时手动转码(兼容低版本Python)

如果你的Python版本低于3.7,没法用sys.stdout.reconfigure,可以在打印时手动把字符串转成utf-8字节串输出:

# 替换原有的print语句
print(soup.prettify().encode('utf-8'))

不过这种方式打印出来的是字节串(开头带b'),可读性稍差,优先推荐前两种方法。

为什么你之前的尝试没用?

driver.page_source本身就是Unicode字符串,你把它encode成utf-8字节串后,BeautifulSoup会自动解码回Unicode,最后打印时还是会触发控制台的编码限制——问题根源从来不在page_source的获取上,而是输出环节的编码不匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:38:23