python 从word/docx中提取链接(hyperlink)和文本

import zipfile
import re
import json
import base64
from docx import Document
from os.path import basename
from docx.opc.constants import RELATIONSHIP_TYPE as RT
from bs4 import BeautifulSoup

def get_linked_text(soup):

    links = []

    # This kind of link has a corresponding URL in the _rel file.
    for tag in soup.find_all("hyperlink"):
        # try/except because some hyperlinks have no id.
        try:
            links.append({"id": tag["r:id"], "text": tag.text})
        except:
            pass

    # This kind does not.
    for tag in soup.find_all("instrText"):
        # They're identified by the word HYPERLINK
        if "HYPERLINK" in tag.text:
            # Get the URL. Probably.
            url = tag.text.split('"')[1]

            # The actual linked text is stored nearby tags.
            # Loop through the siblings starting here.
            temp = tag.parent.next_sibling
            text = ""

            while temp is not None:
                # Text comes in <t> tags.
                maybe_text = temp.find("t")
                if maybe_text is not None:
                    # Ones that have text in them.
                    if maybe_text.text.strip() != "":
                        text += maybe_text.text.strip()

                # Links end with <w:fldChar w:fldCharType="end" />.
                maybe_end = temp.find("fldChar[w:fldCharType]")
                if maybe_end is not None:
                    if maybe_end["w:fldCharType"] == "end":
                        break

                temp = temp.next_sibling

            links.append({"id": None, "href": url, "text": text})

    return links

if __name__ == '__main__':
    file_name="xx.docx"
    archive = zipfile.ZipFile(file_name, "r")
    file_data = archive.read("word/document.xml")
    doc_soup = BeautifulSoup(file_data, "xml")
    linked_text = get_linked_text(doc_soup)
    print(linked_text)

参考:

https://github.com/Colin-Fredericks/hx_util/blob/master/hx_util/GetWordLinks.py

本文地址: http://chenxm.cc/article/1227.html
版权声明: 本文为原创文章,版权归  陈新明  所有,欢迎分享本文,转载请保留出处!
上一篇: word读取图片,并将图片转换成链接
下一篇: python docx 关闭当正在一个word文件时
发表评论

还没有留言,还不快点抢沙发?