Python提取PDF内容,4个方法让效率翻倍!

你是不是经常需要从PDF里提取数据?
手动复制粘贴太慢了,格式还乱七八糟。
说实话,我之前也为此头疼。
直到我发现了Python的强大。
今天分享4个提取PDF内容的方法,让你告别复制粘贴。
往期阅读>>>
Python 自动化管理Jenkins的15个实用脚本,提升效率
App2Docker:如何无需编写Dockerfile也可以创建容器镜像
Python 自动化识别Nginx配置并导出为excel文件,提升Nginx管理效率
方法一:PyPDF2提取文字
最简单的方式就是用PyPDF2。
它像个基础版的PDF阅读器,能快速把文字抠出来。
import PyPDF2def extract_text_pypdf2(pdf_path): """提取PDF中的文字内容""" with open(pdf_path, 'rb') as file: pdf_reader = PyPDF2.PdfReader(file) text = "" for page in pdf_reader.pages: text += page.extract_text() return text
用起来很简单对吧?
打开PDF,一页页读,把文字拼起来就行。
不过它只能提取文字,表格和图片就无能为力了。
适合场景
:只需要提取纯文字,PDF结构简单
方法二:pdfplumber(强烈推荐)
这个库我必须重点推荐。
为什么?因为它能提取文字、表格、图片三种内容。
就像一个全能选手,什么都能干。
import pdfplumberimport pandas as pddef extract_pdf_content(pdf_path): """使用 pdfplumber 提取 PDF 的文字、表格、图片信息""" results = { 'text': '', 'tables': [], 'images': [] } with pdfplumber.open(pdf_path) as pdf: for page in pdf.pages: # 1. 文字 text = page.extract_text() if text: results['text'] += text + '\n' # 2. 表格 tables = page.extract_tables() for table in tables: if table: df = pd.DataFrame(table[1:], columns=table[0]) results['tables'].append(df) # 3. 图片 for img in page.images: results['images'].append({ 'page': page.page_number, 'bbox': (img['x0'], img['y0'], img['x1'], img['y1']), 'width': img.get('width'), 'height': img.get('height') }) return results
你看,代码也不复杂。
但功能强大多了,表格提取尤其出色。
适合场景
:需要提取文字+表格的PDF,最常用的方案
方法三:PyMuPDF提取图片
PyMuPDF(也叫fitz)的特点是什么?
图片提取效果好,速度快。
如果你需要把PDF里的图片都抠出来,选它准没错。
import fitzfrom PIL import Imageimport iodef extract_pdf_fitz(pdf_path): doc = fitz.open(pdf_path) results = {'text': '', 'images': []} for page_num in range(len(doc)): page = doc[page_num] # 1. 文字 results['text'] += page.get_text() # 2. 图片 for img in page.get_images(): xref = img[0] pix = fitz.Pixmap(doc, xref) if pix.n - pix.alpha < 4: img_data = pix.tobytes("png") results['images'].append( {'page': page_num+1, 'image_data': Image.open(io.BytesIO(img_data)), 'size': (pix.width, pix.height)} ) pix = None doc.close() return results
图片提取的质量很高,还能转成PIL格式直接处理。
适合场景
:重点需要提取PDF中的图片
方法四:camelot专门提取表格
camelot是个专才,只干一件事:提取表格。
但这一件事,它做得比谁都好。
特别是那些复杂的表格,它的准确率最高。
import camelotdef extract_tables_camelot(pdf_path): """使用camelot专门提取表格(适合复杂的表格)""" tables = camelot.read_pdf(pdf_path, pages='all') results = [] for i, table in enumerate(tables): df = table.df results.append({ 'table_number': i + 1, 'accuracy': table.accuracy, 'dataframe': df, 'shape': df.shape }) return results
它还能告诉你提取的准确率,很贴心。
适合场景
:PDF里有大量复杂表格,对准确率要求高
这四个方法怎么选?
给你一个简单的对比表:
|
|
|
|
|
|
|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
推荐
|
|
|
|
|
|
|
|
|
|
|
|
|
我的建议:
如果只要文字:PyPDF2够用了
如果要文字+表格:pdfplumber是首选
如果要图片:PyMuPDF
如果表格复杂:camelot
终极组合
pdfplumber + PyMuPDF,文字、表格、图片全覆盖
写在最后
Python处理PDF确实强大。
选对库,事半功倍。
希望这4个方法能帮到你。
如果有其他问题,评论区聊聊~
💬 你平时用Python处理PDF遇到过什么坑?欢迎分享!
如果这篇文章对你有帮助,点个在看让更多人看到吧
想高效学习Python?下面三本精选好书满足你的不同需求!
《流畅的Python(第2版)》——Python进阶必读!深入讲解高级特性与最佳实践,适合想精进的开发者。
《Python从新手到高手》:初学者首选,系统学习全栈技能。
《Python数据分析:从零基础入门到案例实战》——数据科学利器!手把手教你用Python处理数据,实战案例学完就能用。
三本书均支持先用后付、运费险和7天无理由退货,放心购买!点击“购买”按钮,立即开启你的Python学习之旅吧!
https://ima.qq.com/wiki/?shareId=f2628818f0874da17b71ffa0e5e8408114e7dbad46f1745bbd1cc1365277631c

夜雨聆风
