16 KiB
🚀 PLAN ULEPSZEŃ SYSTEMU SCRAPINGU
Data: 2025-11-27 Autor: Claude Code Status: Propozycje do implementacji
📊 AKTUALNE MOŻLIWOŚCI (v1.0)
✅ Co już zbieramy:
- Raw HTML (50k znaków)
- Tekst bez tagów (30k znaków)
- Tytuł strony
- Meta description/keywords
- Dane kontaktowe: email, telefon (regex)
- Social media links
- Word count, char count
- AI Analysis:
- Business summary
- Services list
- Suggested category (95% confidence avg)
- Target market
- USP (Unique Selling Points)
- Company values
- Certifications
🎯 ULEPSZENIA PRIORITY 1 (Quick Wins)
1. Rozszerzona Ekstrakcja Danych Kontaktowych
Problem: Obecnie znajdujemy tylko podstawowe email/telefon Rozwiązanie: Multi-level extraction
class EnhancedContactExtractor:
"""
Ekstrakcja wielu form kontaktu
"""
def extract_all_contacts(self, soup, text):
return {
'emails': {
'general': self._extract_general_emails(text),
'sales': self._extract_sales_emails(text),
'support': self._extract_support_emails(text),
'hr': self._extract_hr_emails(text)
},
'phones': {
'office': self._extract_office_phones(text),
'mobile': self._extract_mobile_phones(text),
'fax': self._extract_fax(text),
'emergency': self._extract_emergency_phones(text)
},
'addresses': {
'headquarters': self._extract_address(soup),
'branches': self._extract_branches(soup)
},
'social_media': {
'facebook': self._extract_fb_url(soup),
'linkedin': self._extract_linkedin_url(soup),
'instagram': self._extract_instagram_url(soup),
'youtube': self._extract_youtube_url(soup),
'twitter': self._extract_twitter_url(soup)
},
'messaging': {
'whatsapp': self._extract_whatsapp(text),
'telegram': self._extract_telegram(text),
'messenger': self._extract_messenger(soup)
}
}
Wartość biznesowa: Kompletna baza kontaktów do networkingu
2. Ekstrakcja Godzin Otwarcia
Problem: Nie wiemy kiedy firmy działają Rozwiązanie: NLP + Pattern matching
def extract_business_hours(self, text):
"""
Wykrywa godziny otwarcia z różnych formatów:
- "Pon-Pt: 8:00-16:00"
- "Poniedziałek-Piątek 8-16"
- "24/7"
- "Czynne: 9:00 - 17:00"
"""
patterns = [
r'(?:pon|pn).*?(?:pt|piątek).*?(\d{1,2}[:\.]?\d{0,2})\s*-\s*(\d{1,2}[:\.]?\d{0,2})',
r'godziny?\s+otwarcia.*?(\d{1,2}[:\.]?\d{0,2})\s*-\s*(\d{1,2}[:\.]?\d{0,2})',
r'czynne.*?(\d{1,2}[:\.]?\d{0,2})\s*-\s*(\d{1,2}[:\.]?\d{0,2})',
r'24/7',
r'non-stop'
]
# AI fallback if regex fails
if not found_hours:
return self._ai_extract_hours(text)
Wartość biznesowa: Wiadomo kiedy można się skontaktować
3. Certyfikaty i Nagrody (Enhanced)
Problem: Obecnie AI znajduje niektóre, ale nie wszystkie Rozwiązanie: Targeted extraction + visual recognition
def extract_certifications(self, soup, text):
"""
Wykrywa:
- ISO certyfikaty (9001, 14001, 27001, etc.)
- Branżowe certyfikaty
- Nagrody (Diamenty Forbesa, Gazele Biznesu)
- Członkostwa (KDPW, KIG, etc.)
- EU dofinansowania
"""
certifications = {
'iso': self._extract_iso_certs(text), # ISO 9001:2015
'industry': self._extract_industry_certs(text), # SEP, budowlane
'awards': self._extract_awards(text), # Nagrody
'memberships': self._extract_memberships(text), # Izby gospodarcze
'eu_funding': self._extract_eu_funding(text), # PARP, UE
'verified_supplier': self._check_verified_badges(soup) # Google Verified
}
return certifications
Wartość biznesowa: Trust indicators, jakość firm
4. Historia Firmy & Doświadczenie
Problem: Nie wiemy ile lat firma działa Rozwiązanie: Timeline extraction
def extract_company_history(self, text):
"""
Wykrywa:
- Rok założenia ("od 1995", "założona w 2005")
- Lata doświadczenia ("20 lat na rynku")
- Kamienie milowe ("od 2010 jako sp. z o.o.")
- Rozwój ("obecnie 50+ pracowników")
"""
return {
'founded_year': self._extract_founding_year(text),
'years_in_business': self._calculate_years(founded_year),
'milestones': self._extract_milestones(text),
'growth_indicators': self._extract_growth(text)
}
Wartość biznesowa: Wiarygodność, doświadczenie
5. Zakres Geograficzny
Problem: Nie wiemy gdzie firma działa Rozwiązanie: Geographic extraction
def extract_service_area(self, text):
"""
Wykrywa obszar działania:
- "Trójmiasto i okolice"
- "cała Polska"
- "Europa Północna"
- "Wejherowo, Puck, Gdynia"
"""
return {
'local': self._extract_local_areas(text), # Miasta
'regional': self._extract_regions(text), # Województwa
'national': self._check_national_coverage(text), # Cała PL
'international': self._extract_countries(text) # Export
}
Wartość biznesowa: Matching firm po lokalizacji
🚀 ULEPSZENIA PRIORITY 2 (Advanced)
6. Ekstrakcja Portfolio & Case Studies
def extract_portfolio(self, soup):
"""
Znajduje:
- Realizacje / Portfolio
- Case studies
- Referencje klientów
- Przykładowe projekty
"""
portfolio_sections = soup.find_all(['section', 'div'],
class_=re.compile(r'portfolio|realizacje|projekty|case-stud', re.I))
projects = []
for section in portfolio_sections:
projects.append({
'title': self._extract_project_title(section),
'client': self._extract_client_name(section),
'description': self._extract_project_desc(section),
'images': self._extract_project_images(section),
'year': self._extract_project_year(section)
})
return {
'projects_count': len(projects),
'projects': projects[:10], # Top 10
'featured_clients': self._extract_client_logos(soup)
}
Wartość biznesowa: Social proof, referencje
7. Cenniki & Pricing Indicators
def extract_pricing_info(self, text, soup):
"""
Wykrywa informacje o cenach (jeśli dostępne):
- Zakresy cenowe ("od 100 zł")
- Darmowe konsultacje
- Wycena indywidualna
- Przykładowe ceny usług
"""
return {
'has_public_prices': self._check_price_list(soup),
'price_ranges': self._extract_price_ranges(text),
'free_consultation': self._check_free_consult(text),
'custom_quote': self._check_custom_quote(text),
'payment_methods': self._extract_payment_methods(text)
}
Wartość biznesowa: Transparentność cenowa
8. Zespół & Struktura
def extract_team_info(self, soup, text):
"""
Wykrywa informacje o zespole:
- Liczba pracowników
- Kadra zarządzająca
- Eksperci / specjaliści
- Struktura organizacyjna
"""
return {
'employee_count': self._extract_employee_count(text),
'management': self._extract_management(soup),
'specialists': self._extract_specialists(soup),
'departments': self._extract_departments(text)
}
Wartość biznesowa: Wielkość firmy, kluczowe osoby
9. Content & Marketing Quality
def analyze_content_quality(self, soup, text):
"""
Analiza jakości strony:
- Obecność bloga
- Aktualność treści
- SEO quality
- Call-to-actions
- Downloadable materials
"""
return {
'has_blog': self._check_blog(soup),
'blog_frequency': self._estimate_blog_activity(soup),
'news_section': self._check_news(soup),
'downloads': self._extract_downloads(soup), # Katalogi, broszury
'videos': self._extract_videos(soup),
'seo_quality_score': self._calculate_seo_score(soup, text),
'cta_elements': self._count_cta_buttons(soup),
'contact_form': self._check_contact_form(soup)
}
Wartość biznesowa: Ocena profesjonalizmu strony
10. Technologie & Narzędzia
def extract_technologies(self, soup, text):
"""
Wykrywa technologie używane przez firmę:
- Software (SAP, AutoCAD, Revit)
- Platformy (WooCommerce, Shopify)
- Narzędzia branżowe
- Certyfikaty partnerskie (Microsoft Partner, etc.)
"""
tech_keywords = {
'software': ['SAP', 'AutoCAD', 'Revit', 'SolidWorks'],
'platforms': ['WooCommerce', 'PrestaShop', 'Shopify'],
'tools': ['Google Analytics', 'HubSpot', 'Salesforce'],
'certifications': ['Microsoft Partner', 'Google Partner', 'AWS Partner']
}
return self._match_technologies(text, tech_keywords)
Wartość biznesowa: Kompetencje techniczne
🔬 ULEPSZENIA PRIORITY 3 (AI-Powered)
11. Sentiment Analysis & Brand Voice
def analyze_brand_voice(self, text):
"""
AI analysis brand voice:
- Formalny / nieformalny
- Nowoczesny / tradycyjny
- B2B / B2C oriented
- Technical / accessible
"""
prompt = f"""
Przeanalizuj ton komunikacji firmy na podstawie tekstu ze strony WWW:
{text[:3000]}
Zwróć JSON:
{{
"tone": "formalny/nieformalny/hybrydowy",
"modernity": 1-10,
"target_audience": "B2B/B2C/both",
"language_complexity": "simple/medium/technical",
"emotional_appeal": 1-10,
"trust_signals": ["konkretne przykłady"]
}}
"""
return self.ai_model.analyze(prompt)
Wartość biznesowa: Profil komunikacyjny firmy
12. Competitive Positioning
def analyze_competitive_position(self, company_data, all_companies_data):
"""
AI porównuje firmę z konkurencją:
- USP vs inne firmy
- Zakres usług vs rynek
- Pricing positioning
- Geographic coverage
"""
prompt = f"""
Porównaj firmę {company_data['name']} z innymi firmami w kategorii
{company_data['category']}:
Firma: {company_data['services']}
Konkurenci: {competitors_summary}
Zwróć JSON z analizą pozycji konkurencyjnej.
"""
return self.ai_model.analyze(prompt)
Wartość biznesowa: Market insights
13. Keyword & SEO Analysis
def analyze_keywords(self, text, meta_keywords):
"""
Ekstrakcja kluczowych słów i analiza SEO:
- Top keywords firmy
- Long-tail keywords
- Industry-specific terms
- SEO optimization score
"""
return {
'top_keywords': self._extract_top_keywords(text, n=20),
'industry_terms': self._extract_industry_keywords(text),
'seo_score': self._calculate_seo_score(text, meta_keywords),
'keyword_density': self._calculate_density(text),
'semantic_clusters': self._cluster_keywords(text)
}
Wartość biznesowa: SEO insights, search optimization
📋 IMPLEMENTATION ROADMAP
FAZA 1 (Tydzień 1) - Quick Wins
- Enhanced contact extraction (email types, multiple phones)
- Business hours extraction
- Certifications & awards targeted extraction
- Company history & founding year
- Service area geographic extraction
Estimated effort: 2-3 dni Impact: HIGH - Immediate value
FAZA 2 (Tydzień 2) - Advanced Features
- Portfolio & case studies extraction
- Pricing indicators
- Team & structure info
- Content quality analysis
- Technologies & tools detection
Estimated effort: 3-4 dni Impact: MEDIUM-HIGH
FAZA 3 (Tydzień 3) - AI-Powered Insights
- Brand voice analysis
- Competitive positioning
- Keyword & SEO analysis
- Market insights generation
Estimated effort: 4-5 dni Impact: MEDIUM - Strategic value
🗄️ DATABASE SCHEMA CHANGES
Nowe tabele:
-- Extended contact info
CREATE TABLE company_contact_details (
id SERIAL PRIMARY KEY,
company_id INTEGER REFERENCES companies(id),
-- Emails
email_general VARCHAR(255),
email_sales VARCHAR(255),
email_support VARCHAR(255),
email_hr VARCHAR(255),
-- Phones
phone_office VARCHAR(50),
phone_mobile VARCHAR(50),
phone_fax VARCHAR(50),
-- Social media (detailed)
facebook_url VARCHAR(500),
linkedin_url VARCHAR(500),
instagram_url VARCHAR(500),
youtube_url VARCHAR(500),
-- Messaging
whatsapp_number VARCHAR(50),
telegram_handle VARCHAR(100),
-- Business hours
opening_hours JSONB,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- Company profile enhanced
CREATE TABLE company_profile_extended (
id SERIAL PRIMARY KEY,
company_id INTEGER REFERENCES companies(id),
-- History
founded_year INTEGER,
years_in_business INTEGER,
employee_count_range VARCHAR(50), -- "10-50", "50-100", etc.
-- Geography
service_area_local TEXT[],
service_area_regional TEXT[],
national_coverage BOOLEAN,
international_markets TEXT[],
-- Certifications
iso_certifications TEXT[],
industry_certifications TEXT[],
awards TEXT[],
memberships TEXT[],
-- Quality indicators
has_portfolio BOOLEAN,
projects_count INTEGER,
has_public_prices BOOLEAN,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- SEO & Marketing analysis
CREATE TABLE company_marketing_analysis (
id SERIAL PRIMARY KEY,
company_id INTEGER REFERENCES companies(id),
-- Content
has_blog BOOLEAN,
has_news_section BOOLEAN,
downloadable_materials TEXT[],
-- SEO
seo_quality_score DECIMAL(3,2),
top_keywords TEXT[],
meta_quality_score DECIMAL(3,2),
-- Brand voice (AI)
brand_tone VARCHAR(50),
language_complexity VARCHAR(50),
target_audience VARCHAR(50),
analyzed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
📊 EXPECTED OUTCOMES
Metryki sukcesu:
| Metryka | Obecnie | Po Ulepszeniach | Wzrost |
|---|---|---|---|
| Dane kontaktowe | 1-2 emaile/telefony | 5-10 kontaktów | +400% |
| Informacje o firmie | 5-7 pól | 20-25 pól | +300% |
| AI insights | Podstawowe | Zaawansowane | +200% |
| Jakość danych | 85% | 95%+ | +12% |
| Pokrycie informacji | 40% | 85%+ | +112% |
Wartość biznesowa:
- Networking: Kompletne dane kontaktowe wszystkich firm
- Trust: Certyfikaty, nagrody, doświadczenie
- Matching: Geografia, technologie, kompetencje
- Intelligence: Analiza konkurencji, pozycjonowanie
- SEO: Keywords, optimization opportunities
🔧 TECHNICAL CONSIDERATIONS
Performance:
- Dodatkowy czas przetwarzania: +2-3s per company
- Dodatkowe API calls do Gemini: +1 request per company
- Database storage: +50-100KB per company
Costs:
- Gemini API: ~$0.04 dla 80 firm (podwojenie z $0.02)
- Database storage: nieznaczący wzrost
- Development time: 2-3 tygodnie
Risks:
- ⚠️ Niektóre dane mogą nie być dostępne na stronach
- ⚠️ Accuracy AI może być niższa dla niektórych pól
- ⚠️ Rate limiting przy większej liczbie requestów
✅ RECOMMENDATIONS
START WITH:
- ✅ Enhanced contact extraction - najwyższa wartość, low effort
- ✅ Certifications & awards - trust building
- ✅ Company history - storytelling
THEN MOVE TO: 4. Portfolio & case studies 5. Geographic coverage 6. Content quality analysis
CONSIDER LATER: 7. AI brand voice analysis 8. Competitive positioning 9. Advanced SEO insights
Next Steps:
- Poczekać na zakończenie obecnego scrapingu
- Przeanalizować quality danych z v1.0
- Wybrać 3-5 najważniejszych ulepszeń
- Implementacja w fazach
- Re-scraping z rozszerzoną funkcjonalnością
Author: Claude Code Date: 2025-11-27 Version: 1.0 (Proposal)