欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python如何提取Word文檔中的超鏈接

 更新時間:2025年03月28日 08:23:28   作者:Eiceblue  
在數(shù)字化辦公場景中,Word文檔作為承載結(jié)構(gòu)化信息的重要載體,常包含大量嵌入的超鏈接以關聯(lián)外部資源或?qū)崿F(xiàn)內(nèi)容交互,下面我們看看如何使用Python實現(xiàn)批量提取這些超鏈接吧

前言

在數(shù)字化辦公場景中,Word文檔作為承載結(jié)構(gòu)化信息的重要載體,常包含大量嵌入的超鏈接以關聯(lián)外部資源或?qū)崿F(xiàn)內(nèi)容交互。這些鏈接可能隱含著關鍵參考數(shù)據(jù)、云端資源定位或動態(tài)更新的數(shù)據(jù)源接口,但人工逐條檢索不僅效率低下且易出現(xiàn)遺漏。自動化提取技術不僅能快速建立鏈接索引,還能分析鏈接分布特征,支撐鏈接有效性驗證、文檔版本監(jiān)控等場景,顯著降低人工操作風險,確保信息管理的完整性與可追溯性。本文將介紹如何使用Python實現(xiàn)Word文檔中超鏈接的批量提取,包括超鏈接錨文本、URL以及屏幕提示文本的提取。

本文所使用的方法需要用到免費的Free Spire.Doc for Python,PyPI:pip install spire.doc.free。

用Python提取Word文檔中的所有超鏈接

我們可以使用庫中的 Document 類來載入Word文檔進行處理。由于Word文檔中的超鏈接是以域(Field)的形式添加到段落文本中的,因此,我們可以通過判斷文檔各節(jié)子對象類型來找出所有段落,然后再判斷段落子對象類型來找出所有域,最后判斷域類型來找出所有超鏈接域。找出超鏈接域之后,我們可以使用 Field.FieldText 屬性獲取超鏈接的錨文本,以及 Field.Code 屬性獲取以下格式的域代碼:

  • 普通超鏈接域代碼:HYPERLINK "https://www.example.com/"
  • 帶屏幕提示的超鏈接域代碼:HYPERLINK "https://www.example.com/ai" \o "屏幕提示內(nèi)容"

通過剪切域代碼,我們可以獲取超鏈接的地址的屏幕提示內(nèi)容,從而提取完整的超鏈接信息。

以下是使用Python提取Word文檔超鏈接的操作步驟:

所需模塊:Document、Paragraph、Field、FieldType。

1.加載 Word 文檔:創(chuàng)建 Document 對象并使用 Document.LoadFromFile() 方法加載目標文件。

2.遍歷文檔結(jié)構(gòu):

  • 遍歷所有節(jié) Sections。
  • 遍歷每個節(jié)的主體子對象 Section.Body.ChildObjects。
  • 篩選出段落 Paragraph 類型的子對象,再遍歷段落中的對象 Paragraph.ChildObjects。

3.提取超鏈接:

  • 識別 Field 類型的段落子對象,同時確定子對象的 FieldType 屬性是否為 FieldType.FieldHyperlink。
  • 解析 FieldText(錨文本)和 Field.Code(URL 及屏幕提示)。

4.保存提取的超鏈接信息。

代碼示例

from spire.doc import Document, Paragraph, Field, FieldType

# 創(chuàng)建Document對象
doc = Document()

# 加載Word文件
doc.LoadFromFile("示例.docx")

# 創(chuàng)建字符串列表用于儲存超鏈接信息
hyperlinks = []

# 遍歷文檔中的節(jié)
for i in range(doc.Sections.Count):
    # 獲取當前節(jié)
    section = doc.Sections.get_Item(i)
    # 遍歷節(jié)中的主體子對象
    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()

提取結(jié)果

方法補充

Python提取docx中的超鏈接

Python如何解析 <w:t></w:t>中間的內(nèi)容

用 xml + 正則表達式如果僅僅使用 for paragraph in document.paragraphs 獲取不包含表格的段落時,還應加上.text屬性

import re
from docx import Document


def get_paragraph_from_docx(file_name):
    """
    網(wǎng)址:https:blog.csdn.net,這是一段有hyperlink的段落
    這是一段沒有hyperlink的段落
    可用于處理包含超鏈接的文本,但會自動跳過表格
    :param file_name:
    :return:
    """
    text = []
    document = Document(file_name)
    for paragraph in document.paragraphs:
        t_para = u""
        # 有無超鏈接均可處理
        xml_str = str(paragraph.paragraph_format.element.xml)
        wt_list = re.findall('<w:t[\S\s]*?</w:t>', xml_str)
        for wt in wt_list:
            wt_content = re.sub('<[\S\s]*?>', u"", wt)
            t_para += wt_content
        if t_para:
            t_para = t_para.strip()
            t_para = re.sub('[\s]', '', t_para)
            if t_para:
                text.append(t_para)
    return text
d = docx.Document(./test.docx)
for p in d.paragraphs:
	xml = p.paragraph_format.element.xml
	xml_str = str(xml)
	wt_list = re.findall('<w:t[\S\s]*?</w:t>', xml_str)
	hyperlink = u''
	for wt in wt_list:
		wt_content = re.sub('<[\S\s]*?>', u'', wt)
		hyperlink += wt_content
	print(hyperlink)

到此這篇關于Python如何提取Word文檔中的超鏈接的文章就介紹到這了,更多相關Python提取Word超鏈接內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用wxpy實現(xiàn)自動發(fā)送微信消息功能

    使用wxpy實現(xiàn)自動發(fā)送微信消息功能

    這篇文章主要介紹了使用wxpy實現(xiàn)自動發(fā)送微信消息功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • python for和else語句趣談

    python for和else語句趣談

    這篇文章主要介紹了python for和else語句趣談,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • OpenCV全景圖像拼接的實現(xiàn)示例

    OpenCV全景圖像拼接的實現(xiàn)示例

    opencv其實自己就有實現(xiàn)圖像拼接的算法,當然效果也是相當好的,本文主要介紹了OpenCV全景圖像拼接,感興趣的可以一起來了解一下
    2021-06-06
  • 工程師必須了解的LRU緩存淘汰算法以及python實現(xiàn)過程

    工程師必須了解的LRU緩存淘汰算法以及python實現(xiàn)過程

    這篇文章主要介紹了工程師必須了解的LRU緩存淘汰算法以及python實現(xiàn)過程,幫助大家更好的學習算法數(shù)據(jù)結(jié)構(gòu),感興趣的朋友可以了解下
    2020-10-10
  • Python中利用sqrt()方法進行平方根計算的教程

    Python中利用sqrt()方法進行平方根計算的教程

    這篇文章主要介紹了Python中利用sqrt()方法進行平方根計算的教程,是Python學習的基礎知識,需要的朋友可以參考下
    2015-05-05
  • Python Coroutine池化的實現(xiàn)詳解

    Python Coroutine池化的實現(xiàn)詳解

    在當今計算機科學和軟件工程的領域中,池化技術如線程池、連接池和對象池等已經(jīng)成為優(yōu)化資源利用率和提高軟件性能的重要工具,所以下面我們就來看看Coroutine池化的具體實現(xiàn)吧
    2024-01-01
  • 聊聊python中的循環(huán)遍歷

    聊聊python中的循環(huán)遍歷

    這篇文章主要介紹了python中的循環(huán)遍歷的相關資料,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-09-09
  • python3操作redis實現(xiàn)List列表實例

    python3操作redis實現(xiàn)List列表實例

    本文主要介紹了python3操作redis實現(xiàn)List列表實例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 基于hashlib模塊--加密(詳解)

    基于hashlib模塊--加密(詳解)

    下面小編就為大家?guī)硪黄趆ashlib模塊--加密(詳解)。小編覺得挺不錯的。現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Django中使用ModelForm生成HTML標簽的方法步驟

    Django中使用ModelForm生成HTML標簽的方法步驟

    在 Django 中,使用 ModelForm 來生成 HTML 表單標簽是一種常見且高效的做法,本文主要介紹了Django中使用ModelForm生成HTML標簽的方法步驟,感興趣的可以了解一下
    2024-01-01

最新評論