上一节中介绍了抽取PDF文本及表格的库pdfplumber,今天介绍另外一个PDF解析库:pdfminer
安装
pip install pdfminer3k
# 或者利用国内镜像源来获取
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pdfminer3k
注意:python2中是pdfminer,python3中是pdfminer3k
读取PDF文本
在网上搜了一圈的资料,实现代码如下:
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBox
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
# 用文件对象来创建一个pdf文档分析器
praser = PDFParser(open('浪潮之巅.pdf','rb'))
# 创建一个PDF文档
doc = PDFDocument()
# 连接分析器与文档对象
praser.set_document(doc)
doc.set_parser(praser)
# 提供初始化密码,如果没有密码,就创建一个空的字符串
doc.initialize()
# 检查文档是否可以转成TXT,如果不可以就忽略
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
else:
#创建PDF资源管理器,来管理共享资源
rsrcmagr = PDFResourceManager()
#创建一个PDF设备对象
laparams = LAParams()
#将资源管理器和设备对象聚合
device = PDFPageAggregator(rsrcmagr, laparams=laparams)
#创建一个PDF解释器对象
interpreter = PDFPageInterpreter(rsrcmagr, device)
#循环遍历列表,每次处理一个page内容
#doc.get_pages()获取page列表
for pg in doc.get_pages():
interpreter.process_page(pg)
#接收该页面的LTPage对象
layout = device.get_result()
#这里的layout是一个LTPage对象 里面存放着page解析出来的各种对象
#一般包括LTTextBox,LTFigure,LTImage,LTTextBoxHorizontal等等一些对像
for x in layout:
if (isinstance(x,LTTextBox)): # 网上是判断LTTextBoxHorizontal,而在我写代码的时候,只能判断LTTextBox
print(x.get_text())
输出如下:
经过实现,利用pdfminer想要抽取PDF的文本内容,对比于包 pdfplumber ,pdfminer 有点过于复杂,不符合python的简介。
参考链接:
Python使用pdfminer解析PDF_光明~~~-CSDN博客_pdfminer
【Python 库】解析PDF文本及表格——pdfminer、tabula、pdfplumber 的用法及对比 - 丹枫无迹 - 博客园