在数字化办公场景中,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文档超链接的操作步骤:
所需模块:DocumentParagraphFieldFieldType

  1. 加载 Word 文档:创建 Document 对象并使用 Document.LoadFromFile() 方法加载目标文件。
  2. 遍历文档结构

    • 遍历所有节 Sections
    • 遍历每个节的主体子对象 Section.Body.ChildObjects
    • 筛选出段落 Paragraph 类型的子对象,再遍历段落中的对象 Paragraph.ChildObjects
  3. 提取超链接

    • 识别 Field 类型的段落子对象,同时确定子对象的 FieldType 属性是否为 FieldType.FieldHyperlink
    • 解析 FieldText(锚文本)和 Field.Code(URL 及屏幕提示)。
  4. 保存提取的超链接信息

代码示例

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文档所有超链接

本文演示如何使用Python提取Word文档中的超链接,包括超链接锚文本、URL和屏幕提示文本。


大丸子
78 声望8 粉丝