fix(parsers): ленивый импорт bs4 в CyberLeninka + добавить в зависимости
Прод-воркер падал на 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 <noreply@anthropic.com>
This commit is contained in:
@@ -17,7 +17,6 @@ from typing import Any
|
|||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
from base import BaseParser
|
from base import BaseParser
|
||||||
from bs4 import BeautifulSoup
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -172,6 +171,9 @@ class CyberLeninkaParser(BaseParser):
|
|||||||
response = self.client.get(url)
|
response = self.client.get(url)
|
||||||
response.raise_for_status()
|
response.raise_for_status()
|
||||||
|
|
||||||
|
# Ленивый импорт: заливке (fetch/transform) bs4 не нужен, только деталям статьи
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
|
|
||||||
soup = BeautifulSoup(response.text, "html.parser")
|
soup = BeautifulSoup(response.text, "html.parser")
|
||||||
meta = {}
|
meta = {}
|
||||||
|
|
||||||
|
|||||||
@@ -9,5 +9,6 @@ python-docx==1.1.0
|
|||||||
datasketch==1.6.5
|
datasketch==1.6.5
|
||||||
xxhash==3.4.1
|
xxhash==3.4.1
|
||||||
langdetect==1.0.9
|
langdetect==1.0.9
|
||||||
|
beautifulsoup4==4.12.3 # парсер CyberLeninka: детали статьи (fetch_article_details)
|
||||||
pydantic-settings==2.2.1
|
pydantic-settings==2.2.1
|
||||||
httpx==0.27.0
|
httpx==0.27.0
|
||||||
|
|||||||
Reference in New Issue
Block a user