Python编程--使用PyPDF解析PDF文件中的元数据

简介: Python编程--使用PyPDF解析PDF文件中的元数据

Python编程–使用PyPDF解析PDF文件中的元数据
元数据
作为一种文件里非常明显可见的对象,元数据可以存在于文档、电子表格、图片、音频和视频文件中。创建这些文件的应用程序可能会把文档的作者、创建和修改时间、可能的更新版本和注释这类详细信息存储下来。例如,手机照相会把照片的GPS位置信息存下来,微软的Word程序也可能会保存文档的作者信息。

案例解析
互联网上至今还能下载到某黑客组织的某个成员的匿名发布的稿子–ANONOPS_The_Press_Release.pdf。匿名者在稿件中发布信息,组织号召要通过对涉及的一些机构进行分布式拒绝服务攻击(DDoS)以实现报复。这个稿子既没有签名,也没有标注消息来源,只是以PDF(Portable Document Format, 便携式文档格式)文件的形式被发布出来。但是实际创建这个文档所用的程序在PDF元数据中记录了文档作者的名字。

PYPDF是一款很优秀的管理PDF文档的第三方实用程序,可以去http://pybrary.net/pyPdf/下载它。它允许提取文档中的内容,或对文档进行分割、合并、复制、加密和解密操作。若要提取元数据,我们可以使用.getDocumentInfo()方法,该方法会返回一个tuple数组,每个tuple中都含有对元数据元素的一个描述及它的值。逐一遍历这个数组,就能打印出PDF文档的所有元数据。

示例代码如下:

import pyPdf
from pyPdf import PdfFileReader

def printMeta(fileName):
    pdfFile = PdfFileReader(file(fileName, 'rb'))
    docInfo = pdfFile.getDocumentInfo()
    print('[*] PDF MetaData For: ' + str(fileName))

    for metaItem in docInfo:
        print(metaItem + ':' + docInfo[metaItem])

再添加一个OptionParser方法,让脚本只解析我们指定文件元数据,这样我们就有了一个能识别嵌入在PDF文档中元数据的工具。同样,我们也可以修改我们的脚本,去检查某个特定的元数据—指定的用户。此示例,帮助帮助希腊的执法官员搜索出所有“作者”这一元数据被标记为Alex Tapanaries的文档。源码如下:

# 导入各类模块
import pyPdf
import optparse
from pyPdf import PdfFileReader, PdfFileWriter


def printMeta(fileName):
    pdfFile = PdfFileReader(file(fileName, 'rb'))
    docInfo = pdfFile.getDocumentInfo()
    print('[*] PDF MetaData For: ' + str(fileName))

    for metaItem in docInfo:
        print(metaItem + ':' + docInfo[metaItem])

def main():
    parser = optparse.OptionParser('usage %prog -F <PDF file name>' )
    parser.add_option('-F', dest = 'filename', type = 'string', help = 'specify PDF  file name')
    (options, args) = parser.parse_args()
    fileName = options.filename
    if fileName == None:
        print(parser.usage)
        exit(0)
    else:
        printMeta(fileName)

if __name__ == '__main__':
    printMeta()

对匿名者网站发布的这个文件运行这个pdfReader脚本,我们就能看到导致希腊当局逮捕Tapanaries先生的元数据。

image.png

相关文章
|
19天前
|
存储 安全 测试技术
Python面试题精选及解析
本文详解Python面试中的六大道经典问题,涵盖列表与元组区别、深浅拷贝、`__new__`与`__init__`、GIL影响、协程原理及可变与不可变类型,助你提升逻辑思维与问题解决能力,全面备战Python技术面试。
|
21天前
|
数据采集 数据挖掘 测试技术
Go与Python爬虫实战对比:从开发效率到性能瓶颈的深度解析
本文对比了Python与Go在爬虫开发中的特点。Python凭借Scrapy等框架在开发效率和易用性上占优,适合快速开发与中小型项目;而Go凭借高并发和高性能优势,适用于大规模、长期运行的爬虫服务。文章通过代码示例和性能测试,分析了两者在并发能力、错误处理、部署维护等方面的差异,并探讨了未来融合发展的趋势。
89 0
|
14天前
|
安全 JavaScript Java
Python中None与NoneType的真相:从单例对象到类型系统的深度解析
本文通过10个真实场景,深入解析Python中表示“空值”的None与NoneType。从单例模式、函数返回值,到类型注解、性能优化,全面揭示None在语言设计与实际编程中的核心作用,帮助开发者正确高效地处理“无值”状态,写出更健壮、清晰的Python代码。
92 3
|
20天前
|
存储 程序员 数据处理
Python列表基础操作全解析:从创建到灵活应用
本文深入浅出地讲解了Python列表的各类操作,从创建、增删改查到遍历与性能优化,内容详实且贴近实战,适合初学者快速掌握这一核心数据结构。
98 0
|
20天前
|
存储 小程序 索引
Python变量与基础数据类型:整型、浮点型和字符串操作全解析
在Python编程中,变量和数据类型是构建程序的基础。本文介绍了三种基本数据类型:整型(int)、浮点型(float)和字符串(str),以及它们在变量中的使用方式和常见操作。通过理解变量的动态特性、数据类型的转换与运算规则,初学者可以更高效地编写清晰、简洁的Python代码,为后续学习打下坚实基础。
111 0
|
21天前
|
并行计算 算法 Java
Python3解释器深度解析与实战教程:从源码到性能优化的全路径探索
Python解释器不止CPython,还包括PyPy、MicroPython、GraalVM等,各具特色,适用于不同场景。本文深入解析Python解释器的工作原理、内存管理机制、GIL限制及其优化策略,并介绍性能调优工具链及未来发展方向,助力开发者提升Python应用性能。
94 0
|
30天前
|
存储 监控 安全
Python剪贴板监控实战:clipboard-monitor库的深度解析与扩展应用
本文介绍了基于Python的剪贴板监控技术,结合clipboard-monitor库实现高效、安全的数据追踪。内容涵盖技术选型、核心功能开发、性能优化及实战应用,适用于安全审计、自动化办公等场景,助力提升数据管理效率与安全性。
68 0
|
2月前
|
C#
【PDF提取内容改名】批量提取PDF指定区域内容重命名PDF文件,PDF自动提取内容命名的方案和详细步骤
本工具可批量提取PDF中的合同编号、日期、发票号等关键信息,支持PDF自定义区域提取并自动重命名文件,适用于合同管理、发票处理、文档归档和数据录入场景。基于iTextSharp库实现,提供完整代码示例与百度、腾讯网盘下载链接,助力高效处理PDF文档。
309 40
|
5月前
|
存储 JSON API
如何将 Swagger 文档导出为 PDF 文件
你会发现自己可能需要将 Swagger 文档导出为 PDF 或文件,以便于共享和存档。在这篇博文中,我们将指导你完成将 Swagger 文档导出为 PDF 格式的过程。
|
2月前
|
编译器 Python
如何利用Python批量重命名PDF文件
本文介绍了如何使用Python提取PDF内容并用于文件重命名。通过安装Python环境、PyCharm编译器及Jupyter Notebook,结合tabula库实现PDF数据读取与处理,并提供代码示例与参考文献。

推荐镜像

更多