Python3.x:PDFMiner3k在线、本地解析pdf详解编程语言
2023-06-13 09:11:43 时间
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
from pdfminer.pdfparser import PDFParser, PDFDocument
解析pdf 文本,保存到txt文件中
importlib.reload(sys)
user_agent = [Mozilla/5.0 (Windows NT 10.0; WOW64), Mozilla/5.0 (Windows NT 6.3; WOW64),
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0,
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11,
Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko,
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36,
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; rv:11.0) like Gecko),
Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1,
Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3,
Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12,
Opera/9.27 (Windows NT 5.2; U; zh-cn),
Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0,
Opera/8.0 (Macintosh; PPC Mac OS X; U; en),
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6,
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0),
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0),
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E),
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Maxthon/4.0.6.2000 Chrome/26.0.1410.43 Safari/537.1 ,
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; QQBrowser/7.3.9825.400),
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0 ,
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.92 Safari/537.1 LBBROWSER,
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; BIDUBrowser 2.x),
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/3.0 Safari/536.11]
def parse(_path):
# fp = open(_path, rb) # rb以二进制读模式打开本地pdf文件
request = Request(url=_path, headers={User-Agent: random.choice(user_agent)}) # 随机从user_agent列表中抽取一个元素
fp = urlopen(request) #打开在线PDF文档
# 用文件对象来创建一个pdf文档分析器
praser_pdf = PDFParser(fp)
# 创建一个PDF文档
doc = PDFDocument()
# 连接分析器 与文档对象
praser_pdf.set_document(doc)
doc.set_parser(praser_pdf)
# 提供初始化密码doc.initialize("123456")
# 如果没有密码 就创建一个空的字符串
doc.initialize()
# 检测文档是否提供txt转换,不提供就忽略
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
else:
# 创建PDf资源管理器 来管理共享资源
rsrcmgr = PDFResourceManager()
# 创建一个PDF参数分析器
laparams = LAParams()
# 创建聚合器
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
# 创建一个PDF页面解释器对象
interpreter = PDFPageInterpreter(rsrcmgr, device)
# 循环遍历列表,每次处理一页的内容
# doc.get_pages() 获取page列表
for page in doc.get_pages():
# 使用页面解释器来读取
interpreter.process_page(page)
# 使用聚合器获取内容
layout = device.get_result()
# 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等 想要获取文本就获得对象的text属性,
for out in layout:
# 判断是否含有get_text()方法,图片之类的就没有
# if hasattr(out,"get_text"):
if isinstance(out, LTTextBoxHorizontal):
results = out.get_text()
print("results: " + results)
if __name__ == __main__:
url = "http://******/201707/P020170717564197883913.pdf"
parse(url)
示例二:解析本地pdf
Demo:pdf2htmlex解析pdf Datetime:2018-02-22 15:30:00 Author:lizm import importlib import sys import random from urllib.request import urlopen from urllib.request import Request from pdfminer.converter import PDFPageAggregator from pdfminer.layout import LTTextBoxHorizontal, LAParams from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.pdfinterp import PDFTextExtractionNotAllowed from pdfminer.pdfparser import PDFParser, PDFDocument 解析pdf 文本,保存到txt文件中 importlib.reload(sys) def parseLocal(path_): fp = open(path_, rb) # 以二进制读模式打开 # 用文件对象来创建一个pdf文档分析器 praser_pdf = PDFParser(fp) # 创建一个PDF文档 doc = PDFDocument() # 连接分析器 与文档对象 praser_pdf.set_document(doc) doc.set_parser(praser_pdf) # 提供初始化密码doc.initialize("123456") # 如果没有密码 就创建一个空的字符串 doc.initialize() # 检测文档是否提供txt转换,不提供就忽略 if not doc.is_extractable: raise PDFTextExtractionNotAllowed else: # 创建PDf资源管理器 来管理共享资源 rsrcmgr = PDFResourceManager() # 创建一个PDF参数分析器 laparams = LAParams() # 创建聚合器 device = PDFPageAggregator(rsrcmgr, laparams=laparams) # 创建一个PDF页面解释器对象 interpreter = PDFPageInterpreter(rsrcmgr, device) pageCount = 0 # 循环遍历列表,每次处理一页的内容 # doc.get_pages() 获取page列表 for page in doc.get_pages(): # 使用页面解释器来读取 interpreter.process_page(page) pageCount = pageCount +1 # 使用聚合器获取内容 layout = device.get_result() count = 0 # 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象 一般包括LTTextBox, LTFigure, # LTImage, LTTextBoxHorizontal 等等 想要获取文本就获得对象的text属性, for out in layout: count = count + 1 # 判断是否含有get_text()方法,图片之类的就没有 # if hasattr(out,"get_text"): if isinstance(out, LTTextBoxHorizontal): results = out.get_text() results = results.strip().replace( , ).replace(,, ).replace(/n, |) print("results:(%s/%s):%s " % (count, pageCount,results)) if __name__ == __main__: path_ = E:/SublimeWorks/project/demo/P020170717564197883913.pdf parseLocal(path_)
注意:PDFMiner3k对表格数据支持不太友好,可以用pdf2htmlwx(非python第三方库)将pdf转为html,然后在解析html;
使用过程中出现:
pdfminer与日志配置代码有冲突: #日志配置代码 logger = logging.getLogger() #set loghandler file = logging.FileHandler(sys.path[0]+"/py_sac_log"+time.strftime("%Y%m%d")+".log") logger.addHandler(file) #set formater formatter = logging.Formatter("%(asctime)s %(levelname)s %(message)s") file.setFormatter(formatter) #set log level logger.setLevel(logging.NOTSET) #还未找到原因
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/16765.html
cjavamacpythonwindows相关文章
- 极速pdf文件打印时此计算机未连接到网络,PDF文件不能打印的五种解决方案[通俗易懂]
- Linux系统安装Python3环境(超详细)
- 失控的 Python3 类型
- python3+Scrapy爬虫实战(一)—— 初识Scrapy
- 关于python3导出excel图片链接转图片且图片内嵌表格内实现
- PDF Reader Pro for mac(全能pdf阅读器)
- Python3 requests 中 cookie文件的保存和使用
- PDF编辑器——Adobe Acrobat X Pro下载安装pdf编辑器全版本下载
- 通过一个小项目介绍Python3读写Access数据库(.mdb)的方法
- PDF Expert for mac(pdf编辑工具) v3.0.37(910)中文激活版
- Python3.x:Linux下退出python命令行详解程序员
- python3产生RSA秘钥对并执行加解密操作详解编程语言
- MySQL数据库:完整的PDF指南(mysql数据库pdf)
- Redis快速入门:PDF指南(redis入门pdf)
- Python3.x:遍历select下拉框获取value值详解编程语言
- Python3.x:os.chdir(改变当前路径方法)介绍详解编程语言
- Linux鸟哥 的PDF学习指南(linux鸟哥pdf)
- Linux源码精要:PDF详解(linux源码pdf)
- Linux系统移植:手把手带你搞定PDF(linux系统移植pdf)
- 掌握Oracle数据库:免费PDF教程(oracle数据库教程pdf)
- 文件Linux下打开PDF文件的方法(linux如何打开pdf)
- Python3.x:报错POST data should be bytes, an iterable of bytes详解编程语言
- Python3.x:定时任务实现方式详解编程语言
- Oracle PDF优化:提升文档体验的技巧分享(oracle优化pdf)
- 轻松学习Linux开发:PDF电子书推荐(linux开发pdf)
- 研究Linux设备驱动:一个PDF指南(linux设备驱动pdf)
- 如何使用MySQL优化技巧提高PDF文档处理效率(mysql优化pdf)
- MySQL5.7中的PDF文档使用指南(mysql5.7pdf)
- 如何在Linux上安装PDF阅读器(linux安装pdf)
- 让你快速掌握Oracle的PDF教程(oracle pdf教程)