Lenta Extractor — утилита для асинхронного поиска и анализа публикаций с Lenta.ru. Она позволяет собрать статьи по заданному запросу, извлечь предложения, содержащие нужное слово, и сохранить результат в Word (.docx) с активными ссылками и контекстом предложений.
Инструмент используется для:
- корпусной лингвистики — исследование контекста употребления слов;
- медиааналитики — анализ тональности и нарративов;
- журналистских и исследовательских проектов — тематический сбор публикаций.
Работа делится на два шага:
| Этап | Команда | Что делает |
|---|---|---|
| 1. Search | lenta-cli search |
выполняет запрос к API Lenta.ru и сохраняет ссылки на найденные статьи |
| 2. Extract | lenta-cli extract |
загружает статьи, находит в них целевое слово и формирует .docx с контекстом |
Результирующий документ выглядит так:
01.09.2024 — Название статьи (кликабельная ссылка)
(без заголовка)
n-предложений перед. <жирное совпадение> n-предложений после.
Стоит уточнить, что предложения берутся в рамках абзаца, т.е. если указано 5 предложений от искомого слова. А оно находится в самом начале предложения, то они не будут выводиться, так как не относятся к абзацу (чтобы сохранилась) суть.
src/lenta_extractor/
├── cli.py # CLI-интерфейс (argparse)
├── search.py # Асинхронный поиск по API lenta.ru
├── extract.py # Извлечение и генерация .docx
├── parsing.py # Парсинг HTML, нормализация текста
├── writer.py # Работа с python-docx
├── config.py # Константы и параметры
├── http_client.py # Асинхронный HTTP-клиент (aiohttp)
tests/ # Тесты
git clone https://github.com/username/lenta-extractor
cd lenta-extractor
pip install -e .Требуемые зависимости:
- Python ≥ 3.13
- aiohttp
- python-docx
- razdel
lenta-cli search --query "деревня" --date-from 2024-01-01 --date-to 2025-10-09 --out links.txtlenta-cli extract --links links.txt --word "деревня" --exclude "деревенск" --pre 1 --post 1 --out lenta_sentences.docxФайл lenta_sentences.docx появится в текущей директории.
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
--query |
str | — | поисковый запрос |
--date-from |
str | — | начальная дата (YYYY-MM-DD) |
--date-to |
str | — | конечная дата (YYYY-MM-DD) |
--size |
int | 50 | размер страницы API |
--concurrency |
int | 10 | параллельные запросы |
--out |
path | lenta_links.txt | файл для сохранения ссылок |
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
--links |
path | — | путь к файлу со ссылками |
--word |
str | — | целевое слово |
--exclude |
regex | "" | исключения (например деревенск) |
--out |
path | lenta_sentences.docx | выходной документ |
--pre |
int | 1 | предложений до совпадения |
--post |
int | 1 | предложений после совпадения |
--amp / --no-amp |
bool | True | использовать AMP версии страниц |
--concurrency |
int | 6 | параллельная загрузка статей |
--timeout |
int | 25 | таймаут HTTP-запроса (сек.) |
Собрать корпус по слову "Россия":
lenta-cli search --query "Россия" --date-from 2024-01-01 --date-to 2025-01-01 --out links.txt
lenta-cli extract --links links.txt --word "Россия" --out corpus.docxТолько одно предложение после совпадения:
lenta-cli extract --links links.txt --word "деревня" --pre 0 --post 1 --out result.docxpip install pytest
pytest -qMIT License — свободно для использования и модификации.