最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

  • 解決TensorFlow訓(xùn)練模型及保存數(shù)量限制的問題

    解決TensorFlow訓(xùn)練模型及保存數(shù)量限制的問題

    這篇文章主要介紹了解決TensorFlow訓(xùn)練模型及保存數(shù)量限制的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python代碼顯得Pythonic(區(qū)別于其他語(yǔ)言的寫法)

    Python代碼顯得Pythonic(區(qū)別于其他語(yǔ)言的寫法)

    這篇文章主要介紹了Python代碼顯得Pythonic(區(qū)別于其他語(yǔ)言的寫法),對(duì)于字符串連接,相比于簡(jiǎn)單的+,更pythonic的做法是盡量使用%操作符或者format函數(shù)格式化字符串,感興趣的小伙伴和小編一起進(jìn)入文章了解更詳細(xì)相關(guān)知識(shí)內(nèi)容吧
    2022-02-02
  • Python中pip安裝非PyPI官網(wǎng)第三方庫(kù)的方法

    Python中pip安裝非PyPI官網(wǎng)第三方庫(kù)的方法

    這篇文章主要介紹了Python中pip安裝非PyPI官網(wǎng)第三方庫(kù)的方法,pip最新的版本(1.5以上的版本), 出于安全的考 慮,pip不允許安裝非PyPI的URL,本文就給出兩種解決方法,需要的朋友可以參考下
    2015-06-06
  • pyspark 隨機(jī)森林的實(shí)現(xiàn)

    pyspark 隨機(jī)森林的實(shí)現(xiàn)

    這篇文章主要介紹了pyspark 隨機(jī)森林的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python簡(jiǎn)單計(jì)算文件MD5值的方法示例

    Python簡(jiǎn)單計(jì)算文件MD5值的方法示例

    這篇文章主要介紹了Python簡(jiǎn)單計(jì)算文件MD5值的方法,涉及Python文件讀取、hash運(yùn)算及md5加密等相關(guān)操作技巧,需要的朋友可以參考下
    2018-04-04
  • 細(xì)數(shù)nn.BCELoss與nn.CrossEntropyLoss的區(qū)別

    細(xì)數(shù)nn.BCELoss與nn.CrossEntropyLoss的區(qū)別

    今天小編就為大家整理了一篇細(xì)數(shù)nn.BCELoss與nn.CrossEntropyLoss的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 使用Python進(jìn)行圖像裁剪和直方圖分析

    使用Python進(jìn)行圖像裁剪和直方圖分析

    在數(shù)字圖像處理領(lǐng)域,裁剪和分析圖像的直方圖是兩個(gè)非?;厩抑匾牟僮?本文將通過一個(gè)簡(jiǎn)單的Python項(xiàng)目,展示如何使用skimage和matplotlib庫(kù)來裁剪圖像并分析其RGB通道的直方圖,感興趣的小伙伴跟著小編一起來看看吧
    2025-01-01
  • pytorch如何自定義forward和backward函數(shù)

    pytorch如何自定義forward和backward函數(shù)

    PyTorch自動(dòng)求導(dǎo)功能強(qiáng)大,但在特定情況下需要用戶自行定義backward函數(shù),通過實(shí)例解釋了保存變量、計(jì)算梯度、鏈?zhǔn)椒▌t等核心概念,并展示了如何通過自定義函數(shù)集成到網(wǎng)絡(luò)中以及如何正確返回梯度,此外,還討論了多輸出情況下的梯度傳遞
    2024-10-10
  • python繪制散點(diǎn)圖詳細(xì)步驟(從0到1必會(huì))

    python繪制散點(diǎn)圖詳細(xì)步驟(從0到1必會(huì))

    這篇文章主要介紹了如何使用Python繪制散點(diǎn)圖,包括導(dǎo)入包、準(zhǔn)備數(shù)據(jù)、繪制圖像、修飾圖像(添加標(biāo)題、坐標(biāo)軸標(biāo)簽、顏色圖例)以及整合所有代碼,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-12-12
  • 詳解Python程序與服務(wù)器連接的WSGI接口

    詳解Python程序與服務(wù)器連接的WSGI接口

    這篇文章主要介紹了Python程序與服務(wù)器連接的WSGI接口,是Python網(wǎng)絡(luò)編程學(xué)習(xí)當(dāng)中的重要內(nèi)容,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

临沧市| 岳阳县| 墨江| 静海县| 五家渠市| 天祝| 汝州市| 清河县| 东乡县| 静安区| 普宁市| 中宁县| 温泉县| 黄浦区| 广丰县| 界首市| 荣成市| 桦川县| 孝感市| 惠水县| 和田市| 天全县| 高阳县| 许昌县| 海林市| 镇原县| 姚安县| 合水县| 德昌县| 金乡县| 贵南县| 临沂市| 泽普县| 崇义县| 灌云县| 读书| 阳高县| 连山| 新巴尔虎左旗| 井冈山市| 武城县|