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

使用python-docx读取Word文档中带超链接的文本时内容丢失怎么办?

解决python-docx提取带超链接文本消失的问题

问题出在paragraph.text只会提取段落中的普通文本,超链接内的文本被封装在<w:hyperlink>节点下,不会被默认包含进去。你需要遍历段落的所有元素,或者直接解析XML节点来提取超链接里的文本。

以下是修改后的代码,能完整提取段落中的所有文本(包括超链接内容):

from docx import Paragraph
from docx.oxml import parse_xml

elements = []
for block in fp.element.body:
    if block.__class__.__name__ == 'CT_P':
        elements.append(('paragraph', block))
    elif block.__class__.__name__ == 'CT_Tbl':
        elements.append(('table', block))

def get_paragraph_full_text(paragraph):
    """提取段落所有文本,包括超链接内容"""
    full_text = []
    # 遍历段落的所有子元素
    for child in paragraph._element:
        # 处理普通文本run
        if child.tag.endswith('r'):
            for text_node in child.xpath('.//w:t'):
                full_text.append(text_node.text)
        # 处理超链接节点
        elif child.tag.endswith('hyperlink'):
            # 提取超链接内的所有文本
            for text_node in child.xpath('.//w:t'):
                full_text.append(text_node.text)
    return ''.join(full_text)

for index, type_el in enumerate(elements):
    element_type, element = type_el[0], type_el[-1]

    # 写入段落文本到TXT
    if element_type == 'paragraph':
        paragraph = Paragraph(parse_xml(element.xml), parent=None)
        img = paragraph._element.xpath('.//pic:pic')
        if not img:
            # 替换原来的paragraph.text为自定义函数提取的完整文本
            txt = get_paragraph_full_text(paragraph)
            if txt != "":
                txt_file.write(txt + "\n")

关键说明

  • 新增get_paragraph_full_text函数,遍历段落的子节点,分别处理普通文本节点和超链接节点,提取所有<w:t>标签里的文本内容。
  • 替换原代码中txt = paragraph.text为txt = get_paragraph_full_text(paragraph),即可获取包含超链接文本的完整段落内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:17:15