You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python新手求助:如何从docx文档中提取超链接?

解决docx文件超链接提取失败的问题

你当前方法失效的核心原因是:docx2txt提取的是文档的可见文本内容,而通过右键插入的超链接,其目标URL并不直接包含在提取的文本里——这些链接地址存储在Word文档内部的XML关系结构(rels)中,所以正则表达式自然匹配不到任何结果。

推荐使用python-docx库直接操作文档的底层结构来提取超链接,以下是可行的代码:

from docx import Document

def extract_hyperlinks_from_word(file_path):
    hyperlinks = []
    doc = Document(file_path)
    
    # 遍历文档中所有段落
    for para in doc.paragraphs:
        # 遍历段落中的每个文本块(run)
        for run in para.runs:
            # 检查当前run是否关联了超链接关系
            if run._element.xpath('.//w:hyperlink'):
                hyperlink_rels = run._element.xpath('.//w:hyperlink/@r:id')
                for rel_id in hyperlink_rels:
                    # 通过关系ID获取对应的超链接目标
                    rel = doc.part.rels[rel_id]
                    target_url = rel.target_ref
                    # 过滤只保留外部网页链接(可根据需求调整)
                    if target_url.startswith(('http://', 'https://', 'www.')):
                        hyperlinks.append(target_url)
    # 去重(如果文档中有重复链接)
    return list(set(hyperlinks))

if __name__ == "__main__":
    word_document_path = 'filepath.docx'
    extracted_hyperlinks = extract_hyperlinks_from_word(word_document_path)
    
    if extracted_hyperlinks:
        print("提取到的超链接:")
        for link in extracted_hyperlinks:
            print(link)
    else:
        print("未找到超链接。")

代码说明:

  • 利用python-docx的底层XML操作,定位到包含超链接的文本块(run)
  • 通过关系ID(r:id)从文档的关系集合中获取对应的目标URL
  • 可选添加去重逻辑,避免重复链接
  • 只筛选外部网页链接,可根据需求修改过滤条件

为什么之前的方法不行?

docx2txt、textract这类工具的核心是提取可见文本,超链接的显示文本和目标URL是分离存储的——你看到的是链接的显示文字,而真实的URL藏在文档的XML元数据里,所以正则无法从提取的文本中匹配到URL。

内容的提问来源于stack exchange,提问作者Dan Lewis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:06:22