程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python編程--使用PyPDF解析PDF文件中的元數據

編輯:Python

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先生的元數據。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved