
你是不是经常需要从PDF里提取数据?
手动复制粘贴太慢了,格式还乱七八糟。
说实话,我之前也为此头疼。
直到我发现了Python的强大。
今天分享4个提取PDF内容的方法,让你告别复制粘贴。
最简单的方式就是用PyPDF2。
它像个基础版的PDF阅读器,能快速把文字抠出来。
import PyPDF2
def 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结构简单
这个库我必须重点推荐。
为什么?因为它能提取文字、表格、图片三种内容。
就像一个全能选手,什么都能干。
import pdfplumber
import pandas as pd
def 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(也叫fitz)的特点是什么?
图片提取效果好,速度快。
如果你需要把PDF里的图片都抠出来,选它准没错。
import fitz
from PIL import Image
import io
def 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是个专才,只干一件事:提取表格。
但这一件事,它做得比谁都好。
特别是那些复杂的表格,它的准确率最高。
import camelot
def 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 | 一般 | 专业 | 不支持 | 表格提取专家 |
我的建议:
如果只要文字:PyPDF2够用了
如果要文字+表格:pdfplumber是首选
如果要图片:PyMuPDF
如果表格复杂:camelot
终极组合pdfplumber + PyMuPDF,文字、表格、图片全覆盖
Python处理PDF确实强大。
选对库,事半功倍。
希望这4个方法能帮到你。
如果有其他问题,评论区聊聊~
💬 你平时用Python处理PDF遇到过什么坑?欢迎分享!
如果这篇文章对你有帮助,点个在看让更多人看到吧
“无他,惟手熟尔”!有需要的用起来!
本文分享自 Nicholas与Pypi 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!