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

lxml.etree.ParserError: Document is empty报错是否由网页加载不全导致?

你推测的页面加载不完全是这个报错的常见触发原因,判断成立,除此之外还有其他场景也会触发该错误。

报错本质

lxml.etree.ParserError: Document is empty 报错的核心原因是传入lxml解析器的待解析内容为空,解析器无法基于空内容构建DOM结构,因此抛出错误。从你提供的报错堆栈可以定位到,问题出现在self._parser = HTML(html=text)这一行,你传入的text变量是空值,向下传递到lxml解析环节触发报错。

# 完整报错堆栈
Traceback (most recent call last):
  File "/home/ubuntu/.local/share/virtualenvs/Project-RDkr7CyY/lib/python3.7/site-packages/pyquery/pyquery.py", line 57, in fromstring
    result = getattr(etree, meth)(context)
  File "src/lxml/etree.pyx", line 3213, in lxml.etree.fromstring
  File "src/lxml/parser.pxi", line 1877, in lxml.etree._parseMemoryDocument
  File "src/lxml/parser.pxi", line 1765, in lxml.etree._parseDoc
  File "src/lxml/parser.pxi", line 1127, in lxml.etree._BaseParser._parseDoc
  File "src/lxml/parser.pxi", line 601, in lxml.etree._ParserContext._handleParseResultDoc
  File "src/lxml/parser.pxi", line 711, in lxml.etree._handleParseResult
  File "src/lxml/parser.pxi", line 640, in lxml.etree._raiseParseError
  File "<string>", line 1
lxml.etree.XMLSyntaxError: Document is empty, line 1, column 1

Traceback (most recent call last):
  File "/home/ubuntu/services/Project/src/parser.py", line 9, in __init__
    self._parser = HTML(html=text)
  File "/home/ubuntu/.local/share/virtualenvs/projects-RDkr7CyY/lib/python3.7/site-packages/requests_html.py", line 421, in __init__
    element=PyQuery(html)('html') or PyQuery(f'<html>{html}</html>')('html'),
  File "/home/ubuntu/.local/share/virtualenvs/projects-RDkr7CyY/lib/python3.7/site-packages/pyquery/pyquery.py", line 217, in __init__
    elements = fromstring(context, self.parser)
  File "/home/ubuntu/.local/share/virtualenvs/projects-RDkr7CyY/lib/python3.7/site-packages/pyquery/pyquery.py", line 61, in fromstring
    result = getattr(lxml.html, meth)(context)
  File "/home/ubuntu/.local/share/virtualenvs/projects-RDkr7CyY/lib/python3.7/site-packages/lxml/html/__init__.py", line 876, in fromstring
    doc = document_fromstring(html, parser=parser, base_url=base_url, **kw)
  File "/home/ubuntu/.local/share/virtualenvs/projects-RDkr7CyY/lib/python3.7/site-packages/lxml/html/__init__.py", line 765, in document_fromstring
    "Document is empty")
lxml.etree.ParserError: Document is empty
所有可能的触发场景
  • 页面加载不完全:动态渲染类页面未等待JS执行完成就提取源码,或者请求未完成就提前调用解析逻辑
  • 请求异常未处理:请求被反爬拦截、返回4xx/5xx状态码,响应体本身为空,未做状态校验就直接解析内容
  • 本地内容读取失败:从本地读取HTML文件时,文件不存在、无读取权限、文件本身为空,导致读取到的内容为空
  • 编码处理错误:响应内容编码和解码规则不匹配,解码后得到空字符串
排查修复方案
  • 解析前先校验内容:传入解析器前打印text的长度和内容,确认是否为空,为空则不执行解析逻辑
  • 增加请求校验逻辑:拿到请求响应后先判断状态码是否为200,再提取响应内容
  • 动态页面增加等待:使用requests-html渲染动态页面时,调用render方法增加sleep参数,例如response.html.render(sleep=2),等待页面完全渲染后再提取源码
  • 增加重试机制:空内容场景下增加请求重试逻辑,避免偶发网络波动导致的内容获取失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:18:01