From 200de018e4ecc7fe69e3288992c9310cdd8df6dc Mon Sep 17 00:00:00 2001 From: ChemaVX Date: Fri, 3 Jul 2026 15:36:04 +0000 Subject: [PATCH] =?UTF-8?q?feat(scraper):=20F1=20=E2=80=94=20lista=20de=20?= =?UTF-8?q?motores=20SearXNG=20ampliada=20y=20configurable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _search_searxng hardcodeaba engines=duckduckgo,google,bing,brave, lo que ignoraba cualquier motor extra de la instancia (y dejaba la búsqueda coja cuando brave cae en rate limit y DDG en CAPTCHA, ambos observados en vivo). Ahora la lista vive en settings.searxng_engines (env SEARXNG_ENGINES, tunable por GitOps sin rebuild). Default ampliado con motores verificados contra la instancia el 2026-07-03: +startpage +mojeek +presearch +google news +bing news +internet archive scholar. Medido con queries reales: ~2x resultados y ~2x dominios únicos por ~+2s/query. Excluidos qwant (denied), yahoo (roto), wikidata (0 en texto) y wayback machine (duplicados). Sin cambios en k8s-manifests: use_default_settings:true ya trae todos estos motores configurados. El fallback a DDG queda intacto. Co-Authored-By: Claude Fable 5 --- src/config.py | 10 ++++++++++ src/scraper/exhaustive.py | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/config.py b/src/config.py index dabee50..6424e98 100644 --- a/src/config.py +++ b/src/config.py @@ -27,6 +27,16 @@ class Settings(BaseSettings): searxng_url: str = Field( "http://searxng-svc.researchowl.svc.cluster.local:8080/search", ) + # Motores que el scraper pide a SearXNG (todos vienen configurados por los + # defaults de la instancia, use_default_settings: true). Verificados en vivo + # 2026-07-03: la lista ampliada duplica resultados y dominios únicos (~2x) + # por ~+2s/query, y da redundancia cuando brave/DDG caen en rate limit o + # CAPTCHA. Excluidos: qwant (access denied), yahoo (roto), wikidata (0 + # resultados en queries de texto), wayback machine (duplica contenido vivo). + searxng_engines: str = Field( + "duckduckgo,google,bing,brave,startpage,mojeek,presearch," + "google news,bing news,internet archive scholar" + ) request_timeout: int = Field(30) request_delay: float = Field(1.0) # seconds between requests min_content_length: int = Field(200) # chars diff --git a/src/scraper/exhaustive.py b/src/scraper/exhaustive.py index 3cc186b..2bbc06c 100644 --- a/src/scraper/exhaustive.py +++ b/src/scraper/exhaustive.py @@ -229,7 +229,7 @@ class ExhaustiveScraper: params = { "q": query, "format": "json", - "engines": "duckduckgo,google,bing,brave", + "engines": settings.searxng_engines, "language": "all", } headers = {