使用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
相关产品推荐
相关产品推荐

