Парсинг PDF у Python: текст, таблиці та дані
19.04.2026PDF давно став стандартом для звітів, інструкцій, рахунків і будь-яких документів, які мають виглядати однаково на різних пристроях. Але коли потрібно не просто прочитати файл, а отримати з нього текст, таблиці чи окремі поля для подальшої обробки, виникає проблема: PDF — це не завжди «документ для читання машиною». У Python для цього є кілька підходів, і вибір інструмента залежить від того, як саме створено файл.
У цій статті розберемо, як витягувати дані з PDF у Python, які бібліотеки використовувати та як працювати як з текстовими PDF, так і зі сканами чи таблицями.
Що таке парсинг PDF
Парсинг PDF — це процес читання вмісту документа та перетворення його на зручний для обробки формат: рядки, списки, таблиці, JSON або DataFrame. На відміну від HTML чи CSV, PDF не зберігає дані у вигляді простої структури. У ньому важливі позиції символів, шрифти, блоки та координати на сторінці.
Через це один і той самий PDF може поводитися по-різному:
- у текстовому PDF дані витягуються відносно легко;
- у PDF, згенерованому зі сканованих зображень, потрібне OCR;
- у документах із таблицями може знадобитися спеціальне розпізнавання структур.
Основні бібліотеки Python для роботи з PDF
Для парсингу PDF у Python найчастіше використовують кілька популярних бібліотек. Кожна має своє призначення, і не існує одного універсального рішення для всіх задач.
PyPDF
PyPDF підходить для базових задач: читання сторінок, витягування тексту, об’єднання або розділення документів. Це хороший старт, якщо PDF містить нормальний текстовий шар.
pdfplumber
pdfplumber часто обирають для більш точного аналізу. Він добре працює з координатами, дозволяє витягувати текст по блоках і зручний для таблиць. Якщо документ має складну верстку, ця бібліотека часто дає кращий результат, ніж просте читання сторінки.
camelot або tabula
Ці інструменти спеціалізуються на таблицях. Вони корисні, коли потрібно витягнути табличні дані в pandas DataFrame. Але якість результату сильно залежить від структури PDF: якщо таблиця намальована акуратно, все спрацьовує добре; якщо ж верстка нестандартна, можуть бути помилки.
OCR-інструменти
Якщо PDF — це скан, тексту в ньому фактично немає, лише зображення. У такому випадку потрібне розпізнавання тексту з картинки. У Python для цього часто поєднують бібліотеки для роботи із зображеннями та OCR-движки. Це вже не класичний парсинг, а оптичне розпізнавання символів.
Як витягнути текст із PDF
Найпростіший сценарій — отримати текст із PDF-документа. Для цього часто достатньо PyPDF або pdfplumber. Нижче приклад із PyPDF:
from pypdf import PdfReader
reader = PdfReader('file.pdf')
text = ''
for page in reader.pages:
text += page.extract_text() + '\n'
print(text)
У простих документах цього може бути достатньо. Проте є кілька нюансів:
- порожні рядки можуть з’являтися в непередбачуваних місцях;
- колонки можуть «злипатися»;
- символи іноді витягуються в неправильному порядку;
- деякі PDF повертають лише частину тексту.
Якщо документ складніший, краще спробувати pdfplumber, де можна працювати з позиціями та точніше контролювати результат.
Витягування таблиць із PDF
Таблиці — одна з найскладніших частин парсингу. Якщо PDF містить таблицю як справжню структуру, а не просто набір тексту в клітинках, шанс на успіх високий. Але якщо лінії відсутні або таблиця створена нестандартно, доведеться підбирати параметри.
Приклад з camelot
camelot добре підходить для багатьох фінансових і звітних PDF, де таблиці мають чіткі межі.
import camelot
tables = camelot.read_pdf('file.pdf', pages='1')
print(tables.n)
df = tables[0].df
print(df)
Зручність у тому, що таблицю можна одразу перетворити на DataFrame і далі обробляти за допомогою pandas: фільтрувати, очищати, зберігати в CSV або Excel.
Коли таблиці витягуються погано
Проблеми часто виникають, якщо:
- таблиця без видимих ліній;
- текст зміщений у комірках;
- є об’єднані клітинки;
- дані розміщені в кілька колонок нестандартним способом.
У таких випадках інколи допомагає pdfplumber, ручне налаштування параметрів або попередня обробка документа. Іноді простіше витягнути текст по координатах і самостійно зібрати таблицю програмно.
Як обробляти скановані PDF
Сканований PDF — це фактично набір зображень сторінок. Тому звичайний extract_text працювати не буде або дасть порожній результат. Тут потрібен OCR.
Типовий підхід такий:
- розбити PDF на зображення сторінок;
- за потреби покращити якість зображення;
- застосувати OCR;
- очистити результат від помилок розпізнавання.
OCR особливо корисний для старих документів, актів, чеків і архівних матеріалів. Але треба враховувати, що якість розпізнавання залежить від роздільної здатності скану, шрифтів, контрасту та навіть нахилу сторінки.
Практичний робочий сценарій
У реальних проєктах парсинг PDF зазвичай будується як конвеєр. Спочатку визначається тип документа, потім підбирається метод витягування, а далі йде очищення та нормалізація даних.
Зручний алгоритм роботи
- Перевірити, чи PDF текстовий, чи сканований.
- Спробувати витягнути текст базовою бібліотекою.
- Якщо є таблиці, протестувати інструмент для табличних даних.
- Якщо результат слабкий, перейти до pdfplumber або OCR.
- Очистити дані: прибрати зайві пробіли, переноси, службові символи.
- Зберегти результат у потрібному форматі: CSV, JSON, Excel чи базу даних.
Такий підхід економить час і дозволяє не прив’язуватися до однієї бібліотеки. PDF-файли бувають дуже різними, тому гнучкість тут важливіша за «найкращий» інструмент.
Поширені помилки під час парсингу PDF
Навіть у простих задачах можна зіткнутися з типовоими проблемами. Ось найчастіші з них:
- очікування, що будь-який PDF легко перетвориться на текст;
- ігнорування того, що сканований документ потребує OCR;
- спроба витягнути таблицю без перевірки структури сторінки;
- непідготовлені дані після розпізнавання, які складно аналізувати далі;
- відсутність перевірки результату на кількох сторінках, а не лише на одній.
Висновок
Парсинг PDF у Python — це не одна конкретна команда, а набір інструментів і підходів. Для простого тексту підійде PyPDF, для точнішої роботи зі структурою — pdfplumber, для таблиць — camelot або tabula, а для сканів — OCR. Найкращий результат зазвичай дає не одна бібліотека, а комбінація методів.
Якщо ви будуєте автоматизацію для документів, починайте з аналізу типу PDF і структури даних. Саме це допоможе обрати правильний спосіб витягування тексту, таблиць і полів без зайвих втрат часу.