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

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

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

前言

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

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

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

我們可以使用庫(kù)中的 Document 類來載入Word文檔進(jìn)行處理。由于Word文檔中的超鏈接是以域(Field)的形式添加到段落文本中的,因此,我們可以通過判斷文檔各節(jié)子對(duì)象類型來找出所有段落,然后再判斷段落子對(duì)象類型來找出所有域,最后判斷域類型來找出所有超鏈接域。找出超鏈接域之后,我們可以使用 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 對(duì)象并使用 Document.LoadFromFile() 方法加載目標(biāo)文件。

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

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

3.提取超鏈接:

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

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

代碼示例

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

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

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

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

# 遍歷文檔中的節(jié)
for i in range(doc.Sections.Count):
    # 獲取當(dāng)前節(jié)
    section = doc.Sections.get_Item(i)
    # 遍歷節(jié)中的主體子對(duì)象
    for j in range(section.Body.ChildObjects.Count):
        # 獲取當(dāng)前子對(duì)象
        secObj = section.Body.ChildObjects.get_Item(j)
        # 判斷子對(duì)象是否為段落
        if isinstance(secObj, Paragraph):
            # 遍歷段落中的子對(duì)象
            for k in range(secObj.ChildObjects.Count):
                # 獲取當(dāng)前子對(duì)象
                paraObj = secObj.ChildObjects.get_Item(k)
                # 判斷子對(duì)象是否為域以及是否為超鏈接域
                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)

# 關(guān)閉文檔
doc.Close()

提取結(jié)果

方法補(bǔ)充

Python提取docx中的超鏈接

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

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

import re
from docx import Document


def get_paragraph_from_docx(file_name):
    """
    網(wǎng)址:https:blog.csdn.net,這是一段有hyperlink的段落
    這是一段沒有hyperlink的段落
    可用于處理包含超鏈接的文本,但會(huì)自動(dòng)跳過表格
    :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)

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

相關(guān)文章

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

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

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

    python for和else語(yǔ)句趣談

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Django中使用ModelForm生成HTML標(biāo)簽的方法步驟

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

最新評(píng)論