在数字化办公场景中,Word文档作为承载结构化信息的重要载体,常包含大量嵌入的超链接以关联外部资源或实现内容交互。这些链接可能隐含着关键参考数据、云端资源定位或动态更新的数据源接口,但人工逐条检索不仅效率低下且易出现遗漏。自动化提取技术不仅能快速建立链接索引,还能分析链接分布特征,支撑链接有效性验证、文档版本监控等场景,显著降低人工操作风险,确保信息管理的完整性与可追溯性。本文将介绍如何使用Python实现Word文档中超链接的批量提取,包括超链接锚文本、URL以及屏幕提示文本的提取。
本文所使用的方法需要用到免费的Free Spire.Doc for Python,PyPI:pip install spire.doc.free
。
用Python提取Word文档中的所有超链接
我们可以使用库中的 Document
类来载入Word文档进行处理。由于Word文档中的超链接是以域(Field)的形式添加到段落文本中的,因此,我们可以通过判断文档各节子对象类型来找出所有段落,然后再判断段落子对象类型来找出所有域,最后判断域类型来找出所有超链接域。找出超链接域之后,我们可以使用 Field.FieldText
属性获取超链接的锚文本,以及 Field.Code
属性获取以下格式的域代码:
- 普通超链接域代码:
HYPERLINK "https://www.example.com/"
- 带屏幕提示的超链接域代码:
HYPERLINK "https://www.example.com/ai" \o "屏幕提示内容"
通过剪切域代码,我们可以获取超链接的地址的屏幕提示内容,从而提取完整的超链接信息。
以下是使用Python提取Word文档超链接的操作步骤:
所需模块:Document
、Paragraph
、Field
、FieldType
。
- 加载 Word 文档:创建
Document
对象并使用Document.LoadFromFile()
方法加载目标文件。 遍历文档结构:
- 遍历所有节
Sections
。 - 遍历每个节的主体子对象
Section.Body.ChildObjects
。 - 筛选出段落
Paragraph
类型的子对象,再遍历段落中的对象Paragraph.ChildObjects
。
- 遍历所有节
提取超链接:
- 识别
Field
类型的段落子对象,同时确定子对象的FieldType
属性是否为FieldType.FieldHyperlink
。 - 解析
FieldText
(锚文本)和Field.Code
(URL 及屏幕提示)。
- 识别
- 保存提取的超链接信息。
代码示例
from spire.doc import Document, Paragraph, Field, FieldType
# 创建Document对象
doc = Document()
# 加载Word文件
doc.LoadFromFile("示例.docx")
# 创建字符串列表用于储存超链接信息
hyperlinks = []
# 遍历文档中的节
for i in range(doc.Sections.Count):
# 获取当前节
section = doc.Sections.get_Item(i)
# 遍历节中的主体子对象
for j in range(section.Body.ChildObjects.Count):
# 获取当前子对象
secObj = section.Body.ChildObjects.get_Item(j)
# 判断子对象是否为段落
if isinstance(secObj, Paragraph):
# 遍历段落中的子对象
for k in range(secObj.ChildObjects.Count):
# 获取当前子对象
paraObj = secObj.ChildObjects.get_Item(k)
# 判断子对象是否为域以及是否为超链接域
if isinstance(paraObj, Field) and paraObj.Type == FieldType.FieldHyperlink:
# 获取超链接的锚文本
anchorText = paraObj.FieldText
# 获取超链接的URL
url = paraObj.Code.split('"')[1]
# 判断是否存在屏幕提示
if "\\o" in paraObj.Code:
# 获取屏幕提示
hyperlinkTip = paraObj.Code.split('\"')[3].strip()
# 将锚文本、URL和屏幕提示组合到字符串中
hyperlinks.append(f"锚文本:{anchorText}\nURL:{url}\n屏幕提示:{hyperlinkTip}\n\n")
else:
# 将锚文本和URL组合到字符串中
hyperlinks.append(f"锚文本:{anchorText}\nURL:{url}\n\n")
# 将超链接信息写入文件
with open("output/提取的超链接.txt", "w", encoding="utf-8") as file:
for hyperlink in hyperlinks:
file.write(hyperlink)
# 关闭文档
doc.Close()
提取结果
本文演示如何使用Python提取Word文档中的超链接,包括超链接锚文本、URL和屏幕提示文本。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。