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

为什么BeautifulSoup无法提取静态网站中文页面的完整HTML?

问题原因
  • 请求头反爬校验:该站点中文页面会校验请求的User-Agent、Accept-Language等请求头字段,urllib默认发送的请求头标识为Python爬虫,被服务端拦截后仅返回部分内容。葡萄牙语页面未配置对应校验逻辑,因此可以正常获取完整响应。
  • 编码解析异常:中文页面包含大量非ASCII字符,若读取字节流后未按页面实际字符集(UTF-8)解码,BeautifulSoup解析时会出现乱码截断,导致最终输出的内容不完整。
修复后代码
from bs4 import BeautifulSoup
from urllib.request import Request, urlopen

# 模拟浏览器请求头
request_headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    "Accept-Language": "zh-CN,zh;q=0.9"
}

# 构造带请求头的请求对象
req = Request(
    url="https://bo.io.gov.mo/bo/ii/2021/43/avisosoficiais_cn.asp",
    headers=request_headers
)
response = urlopen(req)
# 按页面实际编码解码字节流
html_content = response.read().decode("utf-8")

soup = BeautifulSoup(html_content, "lxml")
print(soup.prettify())
验证方法

可以先打印len(response.read())查看原始响应字节长度,和浏览器F12网络面板中该页面的响应大小对比:

  • 若长度差距较大:说明是服务端拦截了请求,确认请求头配置正确即可解决
  • 若长度一致:说明是本地编码解析问题,确认解码所用字符集和页面meta标签声明的字符集匹配即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:03