Python提取PDF内容,4个方法让效率翻倍!
 你是不是经常需要从PDF里提取数据? 手动复制粘贴太慢了,格式还乱七八糟。 说实话,我之前也为此头疼。 直到我发现了Python的强大。 今天分享4个提取PDF内容的方法,让你告别复制粘贴。 --- ## **方法一:PyPDF2提取文字** 最简单的方式就是用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结构简单 ## **方法二:pdfplumber(强烈推荐)** 这个库我必须重点推荐。 为什么?因为它能提取文字、表格、图片三种内容。 就像一个全能选手,什么都能干。 ``` 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提取图片** 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 **适合场景**:重点需要提取PDF中的图片 ## **方法四:camelot专门提取表格** 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遇到过什么坑?欢迎分享! 如果这篇文章对你有帮助,点个**在看**让更多人看到吧 **“无他,惟手熟尔”!**有需要的用起来!