提取大数据
背景:文件数据很大,直接复制会导致机器卡死等效率极低的情况
解密处理
首先看到 .docx 是加密的 Office 文档。用 msoffcrypto 解密:
from pathlib import Path
import msoffcrypto
src = Path(r"C:\Users\q1388\Downloads\download\羊皮卷.docx") #原绝对路径
out = Path("decrypted.docx") #生成文件
with src.open("rb") as f:
office = msoffcrypto.OfficeFile(f)
office.load_key(password="20240815") #密码
with out.open("wb") as g:
office.decrypt(g)
读取
接下来有两种做法:
1、转成zip(这一步可能存在额外隐写)
因为docx本质是压缩包,改后缀名后可以成功打开压缩包,进行手动复制

2、python代码
from docx import Document
from pathlib import Path
import base64
import re
doc = Document("decrypted.docx")
for i, para in enumerate(doc.paragraphs): #doc.paragraphs 是一个段落列表,每个 para 代表 Word 里的一段。enumerate(...) 会同时给出编号和内容
text = "".join(run.text for run in para.runs).strip() #第 i 段 -> 把这一段内部所有碎片文本拼回完整字符串 -> 去掉首尾空白
BASE64下的文件头:
UEsD -> ZIP
iVBOR -> PNG
/9j/ -> JPG
JVBER -> PDF
R0lG -> GIF
转成zip的文件结构
| 分布位置 | 文件 / 目录 | 作用 |
|---|---|---|
| 根目录 | [Content_Types].xml | 内容类型清单,声明包内每类文件是什么类型,比如正文、样式、图片、主题、批注等 |
| 根目录 | _rels/ | 顶层关系目录 |
_rels/ | .rels | 顶层关系文件,告诉 Word 主文档在哪里,通常指向 word/document.xml 和 docProps/* |
| 根目录 | docProps/ | 文档属性目录,存元数据 |
docProps/ | core.xml | 核心元数据:标题、作者、主题、关键词、创建时间、修改时间、最后修改者 |
docProps/ | app.xml | 应用级元数据:创建软件、页数、字数、模板、公司、编辑时长等 |
docProps/ | custom.xml | 自定义属性,用户或软件可写入任意键值对 |
| 根目录 | word/ | Word 正文主体目录,绝大多数内容都在这里 |
word/ | document.xml | 正文主文件,存段落、文本、表格、图片引用、超链接引用等 |
word/ | _rels/ | 正文关系目录 |
word/_rels/ | document.xml.rels | 正文关系文件,记录 document.xml 中引用的图片、超链接、页眉、页脚、脚注、嵌入对象等路径 |
word/ | styles.xml | 样式表,定义标题、正文、字体、颜色、段落格式等 |
word/ | settings.xml | 文档设置,比如兼容模式、隐藏文字显示、修订设置、文档保护等 |
word/ | fontTable.xml | 字体表,记录文档使用过的字体 |
word/ | numbering.xml | 编号和项目符号规则,比如有序列表、无序列表、多级编号 |
word/ | webSettings.xml | Web/HTML 兼容设置,通常不重要 |
word/ | theme/ | 主题目录 |
word/theme/ | theme1.xml | 主题配置,包括主题字体、主题颜色、效果等 |
word/ | media/ | 媒体资源目录 |
word/media/ | image1.png / image1.jpeg 等 | 文档中的图片资源 |
word/ | embeddings/ | 嵌入对象目录 |
word/embeddings/ | oleObject1.bin | OLE 嵌入对象,比如嵌入的 Excel、Word、压缩包、二进制对象 |
word/embeddings/ | Microsoft_Excel_Worksheet1.xlsx 等 | 直接嵌入的 Office 文件 |
word/ | charts/ | 图表目录 |
word/charts/ | chart1.xml | 图表结构和数据引用 |
word/ | diagrams/ | SmartArt 图形目录 |
word/diagrams/ | data1.xml / layout1.xml 等 | SmartArt 的数据、布局、样式 |
word/ | comments.xml | 批注内容 |
word/ | footnotes.xml | 脚注内容 |
word/ | endnotes.xml | 尾注内容 |
word/ | header1.xml / header2.xml | 页眉内容 |
word/ | footer1.xml / footer2.xml | 页脚内容 |
word/ | vbaProject.bin | VBA 宏工程,普通 .docx 正常不该有,带宏通常是 .docm |
word/ | commentsExtended.xml | 扩展批注信息,比如现代 Word 的批注元数据 |
word/ | people.xml | 批注作者、协作人员等人物信息 |
word/ | glossary/ | 构建基块目录,存自动图文集、封面、页眉页脚模板等 |
document.docx
├── [Content_Types].xml
├── _rels/
│ └── .rels
├── docProps/
│ ├── core.xml
│ ├── app.xml
│ └── custom.xml
└── word/
├── document.xml
├── styles.xml
├── settings.xml
├── fontTable.xml
├── numbering.xml
├── webSettings.xml
├── _rels/
│ └── document.xml.rels
├── theme/
│ └── theme1.xml
├── media/
│ ├── image1.png
│ └── image2.jpeg
├── embeddings/
│ └── oleObject1.bin
├── charts/
├── comments.xml
├── footnotes.xml
├── endnotes.xml
├── header1.xml
└── footer1.xml
标签语言:
| XML 标签 | 含义 |
|---|---|
<w:document> | Word 文档根节点 |
<w:body> | 正文主体 |
<w:p> | paragraph,段落 |
<w:r> | run,同一格式的一段文字 |
<w:t> | text,真正的文本内容 |
<w:tbl> | 表格 |
<w:tr> | 表格行 |
<w:tc> | 表格单元格 |
<w:drawing> | 图片、图形等绘制对象 |
<w:hyperlink> | 超链接 |
<w:ins> | 修订中的插入内容 |
<w:del> / <w:delText> | 修订中的删除内容 |
<w:rPr> | run 的格式属性,比如字体、颜色、加粗、隐藏 |
<w:pPr> | 段落格式属性,比如对齐、缩进、行距 |
