From 6099ef621f403511f6ab2724a6630aa751a7a6d6 Mon Sep 17 00:00:00 2001 From: jze9 Date: Wed, 12 Aug 2026 21:10:55 +0500 Subject: [PATCH] =?UTF-8?q?fix(parsers):=20=D0=BB=D0=B5=D0=BD=D0=B8=D0=B2?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=B8=D0=BC=D0=BF=D0=BE=D1=80=D1=82=20bs4=20?= =?UTF-8?q?=D0=B2=20CyberLeninka=20+=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B2=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81?= =?UTF-8?q?=D0=B8=D0=BC=D0=BE=D1=81=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Прод-воркер падал на index.run_parser с 'No module named bs4': парсер импортил beautifulsoup4 на верхнем уровне, а в образе worker-indexer его нет. Но bs4 нужен только для fetch_article_details (детали статьи), а заливке (fetch+transform) — нет. - импорт bs4 сделан ленивым (внутри fetch_article_details) → заливка работает даже без bs4 в образе; - beautifulsoup4 добавлен в worker-indexer/requirements.txt (для деталей статьи). Это была вторая причина, почему CyberLeninka никогда не наполняла базу (первая — GET вместо POST, 405). Проверено вживую: fetch без bs4 в пути работает. Co-Authored-By: Claude Opus 4.8 --- scripts/parsers/cyberleninka.py | 4 +++- services/worker-indexer/requirements.txt | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/parsers/cyberleninka.py b/scripts/parsers/cyberleninka.py index afb36c8..10cf6b1 100644 --- a/scripts/parsers/cyberleninka.py +++ b/scripts/parsers/cyberleninka.py @@ -17,7 +17,6 @@ from typing import Any import httpx from base import BaseParser -from bs4 import BeautifulSoup logger = logging.getLogger(__name__) @@ -172,6 +171,9 @@ class CyberLeninkaParser(BaseParser): response = self.client.get(url) response.raise_for_status() + # Ленивый импорт: заливке (fetch/transform) bs4 не нужен, только деталям статьи + from bs4 import BeautifulSoup + soup = BeautifulSoup(response.text, "html.parser") meta = {} diff --git a/services/worker-indexer/requirements.txt b/services/worker-indexer/requirements.txt index 4b46fab..b3c6c26 100644 --- a/services/worker-indexer/requirements.txt +++ b/services/worker-indexer/requirements.txt @@ -9,5 +9,6 @@ python-docx==1.1.0 datasketch==1.6.5 xxhash==3.4.1 langdetect==1.0.9 +beautifulsoup4==4.12.3 # парсер CyberLeninka: детали статьи (fetch_article_details) pydantic-settings==2.2.1 httpx==0.27.0