Trafilatura: извлечение текста из веб-страниц
Trafilatura — это Python-пакет и утилита командной строки для сбора и извлечения текстовых данных из веб-страниц. Он превращает сырой HTML в структурированные данные: основной текст, метаданные, комментарии. Инструмент ориентирован на практичность и модульность: не требует базы данных, поддерживает несколько форматов вывода.
Trafilatura используется тысячами проектов, в том числе HuggingFace, IBM, Microsoft Research, Allen Institute, Stanford и другими.
Возможности
- Веб-краулинг и обнаружение текста: поддержка sitemap (TXT, XML) и лент (ATOM, JSON, RSS), умная фильтрация и дедупликация URL.
- Параллельная обработка: работа с живыми URL (вежливая загрузка), локальными HTML-файлами и готовыми DOM-деревьями.
- Извлечение ключевых элементов: основной текст (алгоритмы jusText, readability), метаданные (заголовок, автор, дата, категории), структура (абзацы, заголовки, списки, цитаты, код).
- Опциональные элементы: комментарии, ссылки, изображения, таблицы.
- Форматы вывода: TXT, Markdown, CSV, JSON, HTML, XML, XML-TEI.
- Дополнения: определение языка, оптимизация скорости.
- Активная поддержка: регулярные обновления, подробная документация.
Установка
Установка через pip:
pip install trafilatura
Для работы с дополнительными возможностями (например, определение языка) установите пакет с расширениями:
pip install trafilatura[all]
Быстрый старт
Командная строка
Извлечение текста с одной страницы:
trafilatura -u https://example.com
Сохранение в Markdown:
trafilatura -u https://example.com --output-format markdown > output.md
Python
import trafilatura
downloaded = trafilatura.fetch_url('https://example.com')
result = trafilatura.extract(downloaded)
print(result)
Для извлечения с метаданными:
result = trafilatura.extract(downloaded, output_format='json', with_metadata=True)
Конфигурация
Основные параметры функции extract():
output_format: 'txt', 'markdown', 'csv', 'json', 'xml', 'xmltei'
with_metadata: True/False — включить метаданные в вывод
include_comments: True/False — извлекать комментарии
include_tables: True/False — извлекать таблицы
favor_precision / favor_recall: настройка баланса между точностью и полнотой
Примеры использования
Извлечение из списка URL
import trafilatura
urls = ['https://example1.com', 'https://example2.com']
for url in urls:
downloaded = trafilatura.fetch_url(url)
text = trafilatura.extract(downloaded)
print(f'--- {url} ---')
print(text)
Работа с локальным HTML-файлом
with open('page.html', 'r') as f:
html_content = f.read()
text = trafilatura.extract(html_content)
Предупреждения
- Инструмент оптимизирован для извлечения основного текста; для сложных вёрсток может потребоваться настройка параметров.
- При большом объёме данных используйте параллельную загрузку (например, через
concurrent.futures).
- Версии до 1.8.0 распространяются под лицензией GPLv3+, начиная с 1.8.0 — Apache 2.0.
Документация и ресурсы
Лицензия
Apache 2.0 (начиная с версии 1.8.0).
Как цитировать
Если вы используете Trafilatura в научных работах, цитируйте:
@inproceedings{barbaresi-2021-trafilatura,
title = {{Trafilatura: A Web Scraping Library and Command-Line Tool for Text Discovery and Extraction}},
author = "Barbaresi, Adrien",
booktitle = "Proceedings of the Joint Conference of the 59th Annual Meeting of the Association for Computational Linguistics and the 11th International Joint Conference on Natural Language Processing: System Demonstrations",
pages = "122--131",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2021.acl-demo.15",
year = 2021,
}
Вклад в развитие
Баг-репорты и предложения принимаются через GitHub Issues. Инструкция для контрибьюторов — в CONTRIBUTING.md.
Поддержать проект можно на GitHub Sponsors или ko-fi.com.
Комментарии
Комментариев пока нет. Будьте первым.