Puppeteer — это инструмент для автоматизации браузера на базе Chromium, предоставляющий возможности для взаимодействия с веб-страницами, включая захват данных, тестирование пользовательских интерфейсов и рендеринг. В этой части рассмотрим, как можно использовать Puppeteer для извлечения данных из PDF, отображённых на веб-странице.
Чтобы извлечь данные из PDF через страницу с помощью Puppeteer, следует пройти несколько ключевых этапов:
Перед началом работы с Puppeteer, нужно установить сам инструмент и дополнительные зависимости для работы с PDF-документами. Для этого необходимо выполнить несколько шагов.
Для начала устанавливается сам Puppeteer, выполнив команду в терминале:
npm install puppeteer
Хотя Puppeteer предоставляет методы для работы с содержимым страниц, сам парсинг PDF может потребовать дополнительных библиотек. Одна из популярных библиотек для работы с PDF в JavaScript — pdf-lib.
npm install pdf-lib
Puppeteer предоставляет мощные средства для работы с веб-страницами,
включая возможность получения доступа к элементам на странице. Для
начала необходимо открыть страницу, которая содержит PDF. Это можно
сделать с помощью методов page.goto() и
page.waitForSelector().
Пример кода для открытия страницы:
const puppeteer = require(&
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com'); // URL страницы с PDF
await page.waitForSelector('embed[type="application/pdf"]'); // Ожидание загрузки PDF
// Дальше идет обработка PDF
await browser.close();
})();
Этот код открывает страницу и ожидает, пока элемент с PDF (например, тег
<embed>) станет доступным.
После того как страница с PDF загружена, можно извлечь сам файл для
последующей работы с ним. В случае с Puppeteer не существует прямого API
для чтения содержимого PDF, но можно использовать методы для скачивания
PDF-документа. Например, если PDF встроен на страницу через
<embed> или <iframe>, можно
извлечь URL самого файла, а затем использовать сторонние библиотеки для
его парсинга.
Пример получения ссылки на PDF с помощью Puppeteer:
const pdfUrl = await page.evaluate(() => {
const embedElement = document.querySelector('embed[type="application/pdf"]');
return embedElement ? embedElement.src : null;
});
console.log(pdfUrl); // Ссылка на PDF
После получения ссылки на PDF можно скачать сам файл с помощью обычных HTTP-запросов.
const axios = require('axios');
const fs = require('fs');
axios.get(pdfUrl, { responseType: 'arraybuffer' })
.then((response) => {
fs.writeFileSync('document.pdf', response.data);
});
Теперь, когда PDF файл скачан, можно применить одну из библиотек для
работы с ним. Рассмотрим пример с использованием pdf-lib,
которая позволяет читать и анализировать текстовые данные из
PDF-документа.
const fs = require('fs');
const { PDFDocument } = require('pdf-lib');
(async () => {
const pdfBytes = fs.readFileSync('document.pdf');
const pdfDoc = await PDFDocument.load(pdfBytes);
const pages = pdfDoc.getPages();
pages.forEach(page => {
const text = page.getTextContent(); // Извлечение текста со страницы
console.log(text);
});
})();
Важно заметить, что работа с текстом PDF может быть не всегда идеальной, так как структура PDF-документа не всегда позволяет легко извлечь всё содержимое в нужном формате. Особенно это касается документов с нестандартным шрифтом, зашифрованных PDF или документов с изображениями.
Текст не распознаётся корректно. Это может происходить из-за специфической кодировки текста в PDF или использования нестандартных шрифтов. В таких случаях можно использовать специализированные библиотеки для OCR (оптическое распознавание текста), такие как Tesseract.js, для извлечения текста из изображений внутри PDF.
Невозможно получить ссылку на PDF. Если PDF встроен в
страницу с использованием JavaScript, а не простого тега
<embed>, тогда можно использовать более сложные
методы извлечения ссылки на PDF через JavaScript, анализируя сетевые
запросы, которые страница делает при загрузке PDF.
Если стандартный подход с загрузкой и извлечением PDF не даёт нужного результата, существует несколько альтернативных вариантов:
Парсинг через инструменты для анализа PDF. Для более
сложных сценариев можно использовать библиотеки, такие как
pdf2json или pdfjs-dist, которые позволяют
извлекать содержимое PDF в удобном формате для дальнейшей обработки.
Использование OCR-технологий. В случае если PDF включает изображения, которые нужно распознать, можно применить OCR-библиотеки для извлечения текста. Один из вариантов — Tesseract.js, который можно использовать в связке с Puppeteer.
Парсинг PDF с использованием Puppeteer включает несколько этапов: получение ссылки на документ, его скачивание и дальнейшее извлечение данных. Наилучший подход зависит от структуры PDF и сложности документа. В некоторых случаях, для получения более точных результатов, потребуется использовать дополнительные библиотеки для работы с текстом или изображениям в PDF.