首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python提取PDF内容,4个方法让效率翻倍!

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

作者头像
用户11081884
发布2026-07-20 19:58:33
发布2026-07-20 19:58:33
890
举报

你是不是经常需要从PDF里提取数据?

手动复制粘贴太慢了,格式还乱七八糟。

说实话,我之前也为此头疼。

直到我发现了Python的强大。

今天分享4个提取PDF内容的方法,让你告别复制粘贴。


方法一:PyPDF2提取文字

最简单的方式就是用PyPDF2。

它像个基础版的PDF阅读器,能快速把文字抠出来。

代码语言:javascript
复制
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(强烈推荐)

这个库我必须重点推荐。

为什么?因为它能提取文字、表格、图片三种内容。

就像一个全能选手,什么都能干。

代码语言:javascript
复制
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里的图片都抠出来,选它准没错。

代码语言:javascript
复制
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专门提取表格

camelot是个专才,只干一件事:提取表格。

但这一件事,它做得比谁都好。

特别是那些复杂的表格,它的准确率最高。

代码语言:javascript
复制
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遇到过什么坑?欢迎分享!

如果这篇文章对你有帮助,点个在看让更多人看到吧

“无他,惟手熟尔”!有需要的用起来!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 方法一:PyPDF2提取文字
  • 方法二:pdfplumber(强烈推荐)
  • 方法三:PyMuPDF提取图片
  • 方法四:camelot专门提取表格
  • 这四个方法怎么选?
  • 写在最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档