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

网页抓取时单引号、双引号、破折号显示为�乱码问题求助

网页抓取字符乱码排查与解决

核心原因

出现�是编码解码不匹配导致的:网页用UTF-8等编码存储特殊字符,但抓取时用了错误的编码解码,或者终端/输出环境不支持目标编码。


排查思路与解决步骤

1. 确认网页实际编码

先明确网页的真实编码:

  • 手动验证:打开目标网页,右键查看源代码,搜索<meta charset="xxx">,通常会看到UTF-8;
  • 代码自动识别:
import requests
url = "https://everydaypower.com/famous-movie-quotes/"
response = requests.get(url)
# 查看网页声明的编码
print("网页声明编码:", response.encoding)
# 查看requests自动识别的实际编码
print("实际识别编码:", response.apparent_encoding)

如果两个编码值不一致,说明requests默认解码用错了编码。

2. 强制用正确编码解码

不要直接使用response.text,改用response.content.decode(正确编码):

# 用自动识别的编码解码
content = response.content.decode(response.apparent_encoding)
# 或者明确指定UTF-8(如果网页确认是UTF-8编码)
content = response.content.decode("utf-8")

这一步能确保特殊字符被正确解码。

3. 排除终端编码问题

如果解码后写入文件正常,但终端显示乱码,是终端编码不兼容:

  • Windows CMD默认用GBK,可执行chcp 65001切换为UTF-8编码后再运行脚本;
  • 或者直接将内容写入UTF-8编码的文件验证:
with open("quotes.txt", "w", encoding="utf-8") as f:
    f.write(content)

打开文件查看特殊字符是否正常,以此确认是终端还是抓取环节的问题。

4. 解析HTML时保持编码一致

如果用BeautifulSoup解析,确保传入的是正确解码后的内容:

from bs4 import BeautifulSoup
soup = BeautifulSoup(content, "html.parser")
# 提取引用内容示例
quotes = soup.select(".quote-text")
for quote in quotes:
    print(quote.get_text(strip=True))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:32:35