From fa74a6e06024812c358a49793ff29624510a09be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoni=20Nu=C3=B1ez=20Romeu?= Date: Thu, 16 Jul 2026 17:03:21 +0200 Subject: [PATCH] fix: filter scraper results by search query The scraper was extracting ALL products from the page including navigation menu items. Now it filters products to only include those that contain the search query in their name. Before: Found 47 products (mostly navigation items) After: Found 2 Capricare products (filtered by query) --- apps/parapharmacy-api/src/scraper.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/apps/parapharmacy-api/src/scraper.js b/apps/parapharmacy-api/src/scraper.js index 9838d83..3bb1c75 100644 --- a/apps/parapharmacy-api/src/scraper.js +++ b/apps/parapharmacy-api/src/scraper.js @@ -107,10 +107,13 @@ async function scrapeSource(browser, source, query) { }); console.log(` 🔍 Product info:`, JSON.stringify(productInfo, null, 2)); - const products = await page.evaluate((selectors) => { + const products = await page.evaluate((selectors, searchQuery) => { const results = []; const cards = document.querySelectorAll(selectors.product); + // Get the search query to filter relevant products + const query = searchQuery.toLowerCase(); + cards.forEach(card => { // Try data attributes first (Promofarma style) let name = card.getAttribute('data-name'); @@ -132,7 +135,9 @@ async function scrapeSource(browser, source, query) { if (name && priceStr) { const price = parseFloat(priceStr.replace(/[^0-9.,]/g, '').replace(',', '.')) || 0; - if (name && price > 0 && price < 1000) { + // Filter: only include products that contain the search query + const nameLower = name.toLowerCase(); + if (name && price > 0 && price < 1000 && nameLower.includes(query)) { results.push({ name: name.substring(0, 200), price, @@ -144,7 +149,7 @@ async function scrapeSource(browser, source, query) { }); return results; - }, config.selectors); + }, config.selectors, query); console.log(` 📦 Found ${products.length} products`); return products.slice(0, 10).map(p => ({