<未完成>python使用oletools提取docx文件中的嵌入文件(指word中的插入对象)
上午在帮一个同事实现题目中的功能,主要参考的是这篇博客https://zhuanlan.zhihu.com/p/530612244
但是在复现的过程中失败了,下面详细说说。
首先我的环境是centos,参考的博客是在windows中实现的。
博客的实现的步骤主要有两个,一个是将docx文件中的嵌入文件导出为bin文件,此时用的方法为:(需要安装pip install python-docx)
import os from docx import Document # pip install python-docx is_debug = True if __name__ == '__main__': # 需要导出的Word文档路径 target_file = r'paper\HBase试题.docx' # 导出文件所在目录 output_dir = r'paper\output' # 加载Word文档 doc = Document(target_file) # 遍历Word包中的所有文件 dict_rel = doc.part.rels # r_id:文件身份码,rel:文件对象 for r_id, rel in dict_rel.items(): if not ( # 如果文件不是在media或者embeddings中的,直接跳过 str(rel.target_ref).startswith('media') or str(rel.target_ref).startswith('embeddings') ): continue # 如果文件不是我们想要的后缀,也直接跳过 file_suffix = str(rel.target_ref).split('.')[-1:][0] if file_suffix.lower() not in ['png', 'jpg', 'bin']: continue # 如果输出目录不存在,创建 if not os.path.exists(output_dir): os.makedirs(output_dir) # 构建导出文件的名字和路径 file_name = r_id + '_' + str(rel.target_ref).replace('/', '_') file_path = os.path.join(output_dir,file_name) # 将二进制数据写入到新位置的文件中 with open(file_path, "wb") as f: f.write(rel.target_part.blob) # 打印结果 if is_debug: print('导出文件成功:', file_name)
其次在使用oletools包(pip install oletools)的oleobj.py文件将bin文件转为真正的文件(docx,pptx,或者excel文件):
python oleobj.py rId12_embeddings_oleObject1.bin #注意此处的oleobj.py文件可以自己搜索一下找到位置。
但是我使用上面的命令转换失败,主要是卡在了oleobj.py的此行代码 if path_parts[-1].lower() == '\x01ole10native':
我将path_parts[-1].lower()打印出来以后是
objinfo
package
这就导致后面的代码不能被处理,具体原因尚未得知。
本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/17451754.html,如有侵权联系删除