From 1819779aac74988fe56ab16b1c59a1d376fcc331 Mon Sep 17 00:00:00 2001 From: flo-eberle Date: Sun, 15 Feb 2026 10:04:41 +0100 Subject: [PATCH] initial commit --- .env.example | 14 ++ .gitignore | 42 +++++ Dockerfile | 38 +++++ README.md | 289 +++++++++++++++++++++++++++++++++ debug.png | Bin 0 -> 156575 bytes docker-compose.yml | 48 ++++++ requirements.txt | 5 + src/config/__init__.py | 0 src/config/sites.yaml | 38 +++++ src/config_loader.py | 69 ++++++++ src/main.py | 130 +++++++++++++++ src/notifier/__init__.py | 0 src/notifier/email_notifier.py | 135 +++++++++++++++ src/scrapers/__init__.py | 0 src/scrapers/base_scraper.py | 35 ++++ src/scrapers/nhg_scraper.py | 94 +++++++++++ src/storage/__init__.py | 0 src/storage/csv_storage.py | 78 +++++++++ test_data/nhg_test_results.csv | 2 + test_scraper.py | 61 +++++++ 20 files changed, 1078 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 debug.png create mode 100644 docker-compose.yml create mode 100644 requirements.txt create mode 100644 src/config/__init__.py create mode 100644 src/config/sites.yaml create mode 100644 src/config_loader.py create mode 100644 src/main.py create mode 100644 src/notifier/__init__.py create mode 100644 src/notifier/email_notifier.py create mode 100644 src/scrapers/__init__.py create mode 100644 src/scrapers/base_scraper.py create mode 100644 src/scrapers/nhg_scraper.py create mode 100644 src/storage/__init__.py create mode 100644 src/storage/csv_storage.py create mode 100644 test_data/nhg_test_results.csv create mode 100644 test_scraper.py diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..384a818 --- /dev/null +++ b/.env.example @@ -0,0 +1,14 @@ +# Email Configuration +SMTP_SERVER=smtp.gmail.com +SMTP_PORT=587 +EMAIL_USERNAME=your-email@gmail.com +EMAIL_PASSWORD=your-app-password +EMAIL_FROM=your-email@gmail.com +EMAIL_TO=recipient@example.com + +# Email Security (optional) +# Options: none, ssl, tls, starttls +EMAIL_SECURITY=starttls + +# Optional: Multiple recipients (comma-separated) +# EMAIL_TO=recipient1@example.com,recipient2@example.com diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2e216b5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,42 @@ +# Python +__pycache__ +*.pyc +*.pyo +*.pyd +.Python +env +pip-log.txt +pip-delete-this-directory.txt +.tox +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.log +.git +.mypy_cache +.pytest_cache +.hypothesis + +# IDE +.vscode +.idea +*.swp +*.swo + +# OS +.DS_Store +Thumbs.db + +# Local data +data/*.csv + +# Environment variables +.env +.env.local +.env.production + +# Docker +.dockerignore diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2db67ff --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +# Use Python 3.11 slim image for ARM64 compatibility +FROM python:3.11-slim-bullseye + +# Set environment variables +ENV PYTHONUNBUFFERED=1 +ENV PYTHONDONTWRITEBYTECODE=1 +ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + chromium \ + wget \ + gnupg \ + && rm -rf /var/lib/apt/lists/* + +# Set working directory +WORKDIR /app + +# Copy requirements and install Python dependencies +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +# Install Playwright browsers +RUN playwright install chromium +RUN playwright install-deps chromium + +# Copy application code +COPY src/ ./src/ + +# Create data directory +RUN mkdir -p data + +# Create non-root user +RUN useradd -m -u 1000 scraper && chown -R scraper:scraper /app +USER scraper + +# Default command +CMD ["python", "src/main.py"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..97b1e18 --- /dev/null +++ b/README.md @@ -0,0 +1,289 @@ +# Flat Scraper + +Automatischer Web Scraper für Wohnungangebote auf NHG.at mit Benachrichtigungen bei neuen Ergebnissen. + +## Features + +- 🏠 **Automatisches Scraping** von NHG.at Wohnungsangeboten +- 📍 **PLZ-basierte Suche** für 1120, 1140, 1150, 1160 +- 📊 **CSV Storage** für Ergebnisverfolgung +- 🔔 **Benachrichtigungen** bei neuen Wohnungen (Console + Email) +- 🐳 **Docker Support** für Raspberry Pi (ARM64) +- ⏰ **Automatisierte Ausführung** alle 6 Stunden +- 🔐 **Environment Variables** für sensitive Daten (.env) +- 📧 **Email Security** (SSL/TLS/STARTTLS Support) + +## Projektstruktur + +``` +flat_scraper/ +├── src/ +│ ├── scrapers/ # Scraper Module +│ │ ├── base_scraper.py # Basis-Klasse +│ │ └── nhg_scraper.py # NHG.at spezifisch +│ ├── storage/ # Daten-Speicher +│ │ └── csv_storage.py # CSV-basiert +│ ├── notifier/ # Benachrichtigungen +│ │ └── email_notifier.py +│ ├── config/ # Konfiguration +│ │ └── sites.yaml +│ ├── config_loader.py # Konfigurations-Loader mit .env Support +│ └── main.py # Hauptanwendung +├── data/ # CSV Ergebnisse +├── .env.example # Environment Vorlage +├── .env # Deine sensitiven Daten (nicht in VCS) +├── .gitignore # Git ignore für .env und data/ +├── requirements.txt # Python Dependencies +├── Dockerfile # ARM64 optimiert +├── docker-compose.yml # Automatisierung +└── README.md +``` + +## Quick Start + +### 1. Environment einrichten + +```bash +# Environment Vorlage kopieren +cp .env.example .env + +# Deine Daten eintragen +vim .env +``` + +**Wichtige .env Variablen:** +```bash +SMTP_SERVER=smtp.gmail.com +SMTP_PORT=587 +EMAIL_USERNAME=deine-email@gmail.com +EMAIL_PASSWORD=dein-app-password +EMAIL_FROM=deine-email@gmail.com +EMAIL_TO=empfänger@example.com +EMAIL_SECURITY=starttls # Options: none, ssl, tls, starttls +``` + +### 2. Docker auf Raspberry Pi + +```bash +# Build und Start +docker-compose up -d + +# Logs ansehen +docker-compose logs -f flat-scraper + +# Scheduler starten (automatisch alle 6 Stunden) +docker-compose up -d scheduler +``` + +### 3. Manuelles Testen + +```bash +# Einmaliger Lauf +docker-compose run --rm flat-scraper + +# Mit Environment File +docker run --rm -v $(pwd):/app --env-file .env flat-scraper-test python src/main.py +``` + +## Konfiguration + +### Sites konfigurieren (`src/config/sites.yaml`) + +```yaml +sites: + nhg: + name: "Neue Heimat Gewog" + url: "https://nhg.at/immobilienangebot/wohnungsangebot/" + scraper_class: "nhg_scraper.NHGScraper" + enabled: true + search_params: + plz_list: + - "1120 Wien" + - "1140 Wien" + - "1150 Wien" + - "1160 Wien" + schedule: + cron: "0 */6 * * *" # Alle 6 Stunden + timezone: "Europe/Vienna" +``` + +### Email-Benachrichtigungen + +```yaml +notification: + email: + enabled: true + smtp_server: "${SMTP_SERVER}" + smtp_port: "${SMTP_PORT}" + username: "${EMAIL_USERNAME}" + password: "${EMAIL_PASSWORD}" + from_email: "${EMAIL_FROM}" + to_emails: + - "${EMAIL_TO}" + security: "${EMAIL_SECURITY:starttls}" # Options: none, ssl, tls, starttls + + console: + enabled: true # Immer für Debugging +``` + +## Datenformat + +Ergebnisse werden als CSV gespeichert: + +```csv +scrape_time,plz,address,link,hash,scraper +2024-01-15T10:30:00,1120,"1120 Wien, Flurschützstraße 5 / 2 / 10",https://...,abc123,nhg +``` + +**Hash-basierter Vergleich** vermeidet Duplikate zwischen Läufen. + +## Erweiterbarkeit + +### Neue Webseite hinzufügen + +1. **Neue Scraper-Klasse** in `src/scrapers/`: +```python +from .base_scraper import BaseScraper + +class NewSiteScraper(BaseScraper): + async def scrape(self, search_params): + # Implementierung + pass +``` + +2. **Konfiguration erweitern**: +```yaml +sites: + new_site: + name: "New Site" + url: "https://example.com" + scraper_class: "new_site_scraper.NewSiteScraper" + enabled: true + search_params: + # Site-spezifische Parameter +``` + +### Environment Variables + +Der ConfigLoader unterstützt **automatische Substitution**: +```yaml +# In YAML +smtp_server: "${SMTP_SERVER}" +username: "${EMAIL_USERNAME:default@example.com}" # Mit Default +``` + +## Deployment auf Raspberry Pi + +### ARM64 Support + +Der Dockerfile ist für ARM64 optimiert: + +```dockerfile +FROM python:3.11-slim-bullseye +# ARM64 optimierte Browser Installation +RUN apt-get update && apt-get install -y chromium +``` + +### Performance-Tipps + +- `--no-sandbox` für Chromium (im Dockerfile berücksichtigt) +- Shared Browser Path: `PLAYWRIGHT_BROWSERS_PATH=/ms-playwright` +- Memory-optimierte Settings +- Environment Variables statt Hardcoding + +### Docker Compose Features + +- **Volume Mounting**: `./data:/app/data` für persistente CSVs +- **Environment Support**: `--env-file .env` für sensitive Daten +- **Scheduler Service**: Automatische Ausführung alle 6 Stunden +- **Restart Policy**: `unless-stopped` für Zuverlässigkeit + +## Troubleshooting + +### Häufige Probleme + +1. **Browser startet nicht**: `playwright install-deps chromium` +2. **Keine Ergebnisse**: PLZ nicht verfügbar oder Website geändert +3. **Email funktioniert nicht**: SMTP-Einstellungen und Security prüfen +4. **Environment nicht geladen**: `.env` Datei prüfen und Rechte + +### Debugging + +```bash +# Logs ansehen +docker-compose logs -f flat-scraper + +# Manuell testen +docker-compose run --rm flat-scraper python src/main.py + +# Email Test +docker run --rm -v $(pwd):/app --env-file .env flat-scraper-test python -c " +from src.notifier.email_notifier import EmailNotifier +from src.config_loader import ConfigLoader +config = ConfigLoader() +notifier = EmailNotifier(config.get_notification_config()['email']) +test_results = [{'plz': '1120', 'address': 'Test', 'link': '#', 'hash': 'test'}] +notifier.send_notification('test', test_results) +" +``` + +## Entwicklung + +### Testing + +```bash +# Einzelnen Scraper testen +python -c " +import asyncio +from src.scrapers.nhg_scraper import NHGScraper +scraper = NHGScraper({'url': 'https://nhg.at/immobilienangebot/wohnungsangebot/', 'search_params': {'plz_list': ['1120 Wien']}}) +results = asyncio.run(scraper.scrape()) +print(results) +" +``` + +### Logging + +Logs werden automatisch geschrieben: +- Level: `INFO` (kann in `sites.yaml` angepasst werden) +- Format: `Zeitstempel - Modul - Level - Nachricht` +- Output: Console + Docker Logs + +## Sicherheit + +### Environment Variables + +- **`.env`** wird nicht in Git eingecheckt (siehe `.gitignore`) +- **`.env.example`** als Vorlage für das Team +- **Keine Passwörter** im Code oder in YAML +- **Docker Secrets** optional für Production + +### Email Security + +Unterstützte Security Modi: +- **`none`** - Keine Verschlüsselung +- **`ssl`** - SMTP_SSL (Port 465) +- **`tls`** - Explicit TLS (Port 587 + STARTTLS) +- **`starttls`** - STARTTLS (Standard für Gmail) +- **`ssl/tls`** - Kompatibilitätsmodus + +## Architektur + +### Hybrid-Ansatz + +- **BaseScraper**: Gemeinsame Funktionalität (Hashing, Metadata) +- **Site-spezifische Scraper**: Individuelle Implementierungen +- **Config-Driven**: YAML Konfiguration mit Environment Support +- **Modular**: Storage und Notifier austauschbar + +### Datenfluss + +``` +Config → Scraper → Results → Storage → Comparison → Notifier + ↓ ↓ ↓ ↓ ↓ +Environment Playwright CSV Hash-Vergleich Email/Console +``` + +## Lizenz + +MIT License diff --git a/debug.png b/debug.png new file mode 100644 index 0000000000000000000000000000000000000000..af99440b4fdadd6176734a5674b2572f88338670 GIT binary patch literal 156575 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%0DC=lz?}mgEJS5D#=`1auNX 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⋘x2*Dg#Wv&#v{jxB4J_fqSz5dE-{0>Oz0PM#-Y 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 z⋙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

>%Maf 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 V&N)U?nDd4}JQkM~%NEsf|33@UAgTZW literal 0 HcmV?d00001 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..a2a932e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,48 @@ +version: '3.8' + +services: + flat-scraper: + build: . + restart: unless-stopped + volumes: + - ./data:/app/data + - ./src/config:/app/src/config + - ./.env:/app/.env:ro + environment: + - TZ=Europe/Vienna + # For ARM64 (Raspberry Pi) - uncomment if needed + # platform: linux/arm64 + + # Optional: Add a scheduler service for automated runs + scheduler: + build: . + restart: unless-stopped + volumes: + - ./data:/app/data + - ./src/config:/app/src/config + - ./.env:/app/.env:ro + environment: + - TZ=Europe/Vienna + command: > + python -c " + import schedule + import time + from src.main import FlatScraper + + def run_scraper(): + scraper = FlatScraper() + scraper.run_once() + + # Schedule every 6 hours + schedule.every(6).hours.do(run_scraper) + + print('Scheduler started. Running every 6 hours.') + run_scraper() # Run immediately + + while True: + schedule.run_pending() + time.sleep(60) + " + # platform: linux/arm64 + depends_on: + - flat-scraper diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..ef5368f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +playwright==1.40.0 +pandas==2.1.4 +pydantic==2.5.2 +pyyaml==6.0.1 +apscheduler==3.10.4 diff --git a/src/config/__init__.py b/src/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/config/sites.yaml b/src/config/sites.yaml new file mode 100644 index 0000000..93d2d41 --- /dev/null +++ b/src/config/sites.yaml @@ -0,0 +1,38 @@ +sites: + nhg: + name: "Neue Heimat Gewog" + url: "https://nhg.at/immobilienangebot/wohnungsangebot/" + scraper_class: "nhg_scraper.NHGScraper" + enabled: true + search_params: + plz_list: + - "1120 Wien" + - "1140 Wien" + - "1150 Wien" + - "1160 Wien" + schedule: + cron: "0 */6 * * *" # Alle 6 Stunden + timezone: "Europe/Vienna" + +# Email notification settings +notification: + email: + enabled: true # Set to true to enable email notifications + smtp_server: "${SMTP_SERVER}" + smtp_port: "${SMTP_PORT}" + username: "${EMAIL_USERNAME}" + password: "${EMAIL_PASSWORD}" + from_email: "${EMAIL_FROM}" + to_emails: + - "${EMAIL_TO}" + security: "${EMAIL_SECURITY:starttls}" # Options: none, ssl, tls, starttls + + console: + enabled: true # Always enabled for debugging + +# General settings +general: + data_dir: "data" + log_level: "INFO" + max_retries: 3 + retry_delay: 5 # seconds diff --git a/src/config_loader.py b/src/config_loader.py new file mode 100644 index 0000000..c9f9359 --- /dev/null +++ b/src/config_loader.py @@ -0,0 +1,69 @@ +import yaml +import os +from typing import Dict, Any +from pathlib import Path + +class ConfigLoader: + """Load and manage configuration""" + + def __init__(self, config_path: str = "src/config/sites.yaml"): + self.config_path = Path(config_path) + self.config = self._load_config() + + def _load_config(self) -> Dict[str, Any]: + """Load configuration from YAML file""" + if not self.config_path.exists(): + raise FileNotFoundError(f"Konfigurationsdatei nicht gefunden: {self.config_path}") + + try: + with open(self.config_path, 'r', encoding='utf-8') as file: + config = yaml.safe_load(file) + return self._substitute_env_vars(config) + except Exception as e: + raise ValueError(f"Fehler beim Laden der Konfiguration: {e}") + + def _substitute_env_vars(self, config: Any) -> Any: + """Recursively substitute environment variables in configuration""" + if isinstance(config, dict): + return {key: self._substitute_env_vars(value) for key, value in config.items()} + elif isinstance(config, list): + return [self._substitute_env_vars(item) for item in config] + elif isinstance(config, str) and config.startswith('${') and config.endswith('}'): + # Extract environment variable name + env_var = config[2:-1] + default_value = None + + # Handle default values (e.g., ${VAR:default}) + if ':' in env_var: + env_var, default_value = env_var.split(':', 1) + + return os.getenv(env_var, default_value) + else: + return config + + def get_sites(self) -> Dict[str, Any]: + """Get all site configurations""" + return self.config.get('sites', {}) + + def get_site_config(self, site_name: str) -> Dict[str, Any]: + """Get configuration for a specific site""" + sites = self.get_sites() + if site_name not in sites: + raise ValueError(f"Site '{site_name}' nicht in Konfiguration gefunden") + return sites[site_name] + + def get_notification_config(self) -> Dict[str, Any]: + """Get notification configuration""" + return self.config.get('notification', {}) + + def get_general_config(self) -> Dict[str, Any]: + """Get general configuration""" + return self.config.get('general', {}) + + def is_site_enabled(self, site_name: str) -> bool: + """Check if a site is enabled""" + try: + config = self.get_site_config(site_name) + return config.get('enabled', True) + except ValueError: + return False diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..3e28019 --- /dev/null +++ b/src/main.py @@ -0,0 +1,130 @@ +import asyncio +import logging +from datetime import datetime +from typing import Dict, List, Any +import importlib + +from config_loader import ConfigLoader +from storage.csv_storage import CSVStorage +from notifier.email_notifier import EmailNotifier, ConsoleNotifier + +# Setup logging +logging.basicConfig( + level=logging.INFO, + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' +) +logger = logging.getLogger(__name__) + +class FlatScraper: + """Main application class""" + + def __init__(self, config_path: str = "src/config/sites.yaml"): + self.config_loader = ConfigLoader(config_path) + self.storage = CSVStorage(self.config_loader.get_general_config().get('data_dir', 'data')) + self.notifiers = self._setup_notifiers() + self.scrapers = {} + + def _setup_notifiers(self) -> List: + """Setup notification systems""" + notifiers = [] + notification_config = self.config_loader.get_notification_config() + + # Console notifier (always enabled for debugging) + console_config = notification_config.get('console', {}) + if console_config.get('enabled', True): + notifiers.append(ConsoleNotifier()) + + # Email notifier + email_config = notification_config.get('email', {}) + if email_config.get('enabled', False): + notifiers.append(EmailNotifier(email_config)) + + return notifiers + + def _get_scraper_class(self, scraper_class_path: str): + """Dynamically import scraper class""" + module_name, class_name = scraper_class_path.rsplit('.', 1) + module = importlib.import_module(f'scrapers.{module_name}') + return getattr(module, class_name) + + def _get_scraper(self, site_name: str): + """Get or create scraper instance""" + if site_name not in self.scrapers: + site_config = self.config_loader.get_site_config(site_name) + scraper_class_path = site_config.get('scraper_class') + scraper_class = self._get_scraper_class(scraper_class_path) + self.scrapers[site_name] = scraper_class(site_config) + + return self.scrapers[site_name] + + async def scrape_site(self, site_name: str) -> Dict[str, Any]: + """Scrape a single site""" + try: + logger.info(f"Start scraping {site_name}") + scraper = self._get_scraper(site_name) + results = await scraper.scrape() + + logger.info(f"Found {len(results)} results for {site_name}") + + # Compare with previous results + new_results, removed_results = self.storage.compare_results(site_name, results) + + # Save results + self.storage.save_results(site_name, results) + + # Send notifications for new results + if new_results: + logger.info(f"Found {len(new_results)} new results for {site_name}") + for notifier in self.notifiers: + try: + notifier.send_notification(site_name, new_results) + except Exception as e: + logger.error(f"Error sending notification: {e}") + else: + logger.info(f"No new results for {site_name}") + + return { + 'site': site_name, + 'total_results': len(results), + 'new_results': len(new_results), + 'success': True + } + + except Exception as e: + logger.error(f"Error scraping {site_name}: {e}") + return { + 'site': site_name, + 'error': str(e), + 'success': False + } + + async def scrape_all_sites(self) -> List[Dict[str, Any]]: + """Scrape all enabled sites""" + results = [] + sites = self.config_loader.get_sites() + + for site_name in sites.keys(): + if self.config_loader.is_site_enabled(site_name): + result = await self.scrape_site(site_name) + results.append(result) + + return results + + def run_once(self) -> None: + """Run scraping once""" + logger.info("Starting flat scraper run") + results = asyncio.run(self.scrape_all_sites()) + + # Summary + successful = sum(1 for r in results if r['success']) + total_new = sum(r.get('new_results', 0) for r in results) + + logger.info(f"Scraping completed: {successful}/{len(results)} sites successful, {total_new} new results") + +def main(): + """Main entry point""" + scraper = FlatScraper() + scraper.run_once() + +if __name__ == "__main__": + main() diff --git a/src/notifier/__init__.py b/src/notifier/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/notifier/email_notifier.py b/src/notifier/email_notifier.py new file mode 100644 index 0000000..2003550 --- /dev/null +++ b/src/notifier/email_notifier.py @@ -0,0 +1,135 @@ +import smtplib +from email.mime.text import MIMEText +from email.mime.multipart import MIMEMultipart +from typing import List, Dict, Optional +import os +from datetime import datetime + +class EmailNotifier: + """Email notification system""" + + def __init__(self, config: Dict): + self.smtp_server = config.get('smtp_server', 'localhost') + self.smtp_port = int(config.get('smtp_port', 587)) + self.username = config.get('username', '') + self.password = config.get('password', '') + self.from_email = config.get('from_email', self.username) + self.security = config.get('security', 'starttls') + + # Handle to_emails - can be string or list + to_emails = config.get('to_emails', []) + if isinstance(to_emails, str): + self.to_emails = [to_emails] + else: + self.to_emails = to_emails + + def send_notification(self, scraper_name: str, new_results: List[Dict]) -> bool: + """Send email notification for new results""" + if not new_results: + return True + + if not self.to_emails: + print("Keine Empfänger-Emails konfiguriert") + return False + + try: + # Create message + msg = MIMEMultipart() + msg['From'] = self.from_email + msg['To'] = ', '.join(self.to_emails) + msg['Subject'] = f"Neue Wohnungen gefunden: {len(new_results)} neue Ergebnisse für {scraper_name}" + + # Create email body + body = self._create_email_body(scraper_name, new_results) + msg.attach(MIMEText(body, 'html')) + + # Send email with security settings + if self.security in ['ssl', 'ssl/tls']: + server = smtplib.SMTP_SSL(self.smtp_server, self.smtp_port) + else: + server = smtplib.SMTP(self.smtp_server, self.smtp_port) + + # Apply security settings for non-SSL + if self.security in ['tls', 'starttls']: + server.starttls() + + # Login if credentials provided + if self.username and self.password: + server.login(self.username, self.password) + + server.send_message(msg) + server.quit() + + print(f"Email-Benachrichtigung gesendet an {len(self.to_emails)} Empfänger") + return True + + except Exception as e: + print(f"Fehler beim Senden der Email: {e}") + return False + + def _create_email_body(self, scraper_name: str, new_results: List[Dict]) -> str: + """Create HTML email body""" + html = f""" + + +

🏠 Neue Wohnungen gefunden - {scraper_name}

+

Zeitpunkt: {datetime.now().strftime('%d.%m.%Y %H:%M')}

+

Anzahl neuer Ergebnisse: {len(new_results)}

+ +

Neue Wohnungen:

+ + + + + + + """ + + for result in new_results: + plz = result.get('plz', 'N/A') + address = result.get('address', 'N/A') + link = result.get('link', '#') + + html += f""" + + + + + + """ + + html += """ +
PLZAdresseLink
{plz}{address}Details
+
+

Diese Nachricht wurde automatisch vom Flat Scraper gesendet.

+ + + """ + + return html + +class ConsoleNotifier: + """Console notification for testing""" + + def send_notification(self, scraper_name: str, new_results: List[Dict]) -> bool: + """Print notification to console""" + if not new_results: + return True + + print(f"\n{'='*50}") + print(f"🏠 NEUE WOHNUNGEN GEFUNDEN: {scraper_name}") + print(f"Zeitpunkt: {datetime.now().strftime('%d.%m.%Y %H:%M')}") + print(f"Anzahl: {len(new_results)}") + print(f"{'='*50}") + + for result in new_results: + plz = result.get('plz', 'N/A') + address = result.get('address', 'N/A') + link = result.get('link', '#') + + print(f"📍 PLZ {plz}: {address}") + if link != '#': + print(f" 🔗 {link}") + print() + + return True diff --git a/src/scrapers/__init__.py b/src/scrapers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/scrapers/base_scraper.py b/src/scrapers/base_scraper.py new file mode 100644 index 0000000..a16e1e6 --- /dev/null +++ b/src/scrapers/base_scraper.py @@ -0,0 +1,35 @@ +from abc import ABC, abstractmethod +from typing import List, Dict, Any +from datetime import datetime + +class BaseScraper(ABC): + """Base class for all web scrapers""" + + def __init__(self, config: Dict[str, Any]): + self.config = config + self.name = config.get('name', 'unknown') + self.base_url = config.get('url', '') + + @abstractmethod + async def scrape(self, search_params: Dict[str, Any]) -> List[Dict]: + """Scrape data from the website""" + pass + + def generate_hash(self, data: Dict) -> str: + """Generate unique hash for result comparison""" + import hashlib + import json + + # Sort keys for consistent hashing + sorted_data = json.dumps(data, sort_keys=True) + return hashlib.md5(sorted_data.encode()).hexdigest() + + def add_metadata(self, results: List[Dict]) -> List[Dict]: + """Add metadata to results""" + for result in results: + result.update({ + 'scraper': self.name, + 'scrape_time': datetime.now().isoformat(), + 'hash': self.generate_hash(result) + }) + return results diff --git a/src/scrapers/nhg_scraper.py b/src/scrapers/nhg_scraper.py new file mode 100644 index 0000000..365d688 --- /dev/null +++ b/src/scrapers/nhg_scraper.py @@ -0,0 +1,94 @@ +import asyncio +from playwright.async_api import async_playwright +from typing import List, Dict, Any +import time +from .base_scraper import BaseScraper + +class NHGScraper(BaseScraper): + """NHG.at specific scraper""" + + def __init__(self, config: Dict[str, Any]): + super().__init__(config) + self.plz_list = config.get('search_params', {}).get('plz_list', ["1120", "1140", "1150", "1160"]) + self.base_url = config.get('url', 'https://nhg.at/immobilienangebot/wohnungsangebot/') + + async def scrape_plz(self, page, plz: str) -> List[Dict]: + """Scrape alle Wohnungen für eine PLZ""" + results = [] + + try: + # Seite laden + await page.goto(self.base_url) + await page.wait_for_load_state('networkidle') + + # Prüfen ob PLZ verfügbar + options = await page.locator('#Filter_City option').all_text_contents() + if plz not in options: + print(f"PLZ {plz} nicht verfügbar") + return results + + # PLZ auswählen + await page.select_option('#Filter_City', plz) + + # Warten auf Ergebnisse + await page.wait_for_timeout(3000) + + # Ergebnisse aus UnitsList extrahieren + units_list = await page.query_selector('#UnitsList') + if not units_list: + print(f"Keine UnitsList gefunden für PLZ {plz}") + return results + + # Den gesamten Textinhalt holen und nach Adressen durchsuchen + content = await units_list.text_content() + + # Adressen mit Regex finden + import re + address_pattern = r'(\d{4}\s+Wien,\s*[^,\n]+)' + addresses = re.findall(address_pattern, content) + + for address in addresses: + address = address.strip() + if address: + # Details Link suchen + details_link = None + try: + # Suche nach Details Link nach der Adresse + details_elements = await page.locator('#UnitsList a').all() + for element in details_elements: + link_text = await element.text_content() + if 'Details' in link_text: + details_link = await element.get_attribute('href') + break + except: + pass + + result = { + 'plz': plz.split()[0], # Nur die PLZ, ohne "Wien" + 'address': address, + 'link': details_link, + } + results.append(result) + + except Exception as e: + print(f"Fehler beim Scraping von PLZ {plz}: {e}") + + return results + + async def scrape(self, search_params: Dict[str, Any] = None) -> List[Dict]: + """Scrape alle PLZs""" + all_results = [] + + async with async_playwright() as p: + browser = await p.chromium.launch(headless=True) + page = await browser.new_page() + + for plz in self.plz_list: + print(f"Scraping PLZ {plz}...") + results = await self.scrape_plz(page, plz) + all_results.extend(results) + time.sleep(1) # Rate limiting + + await browser.close() + + return self.add_metadata(all_results) diff --git a/src/storage/__init__.py b/src/storage/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/storage/csv_storage.py b/src/storage/csv_storage.py new file mode 100644 index 0000000..6924792 --- /dev/null +++ b/src/storage/csv_storage.py @@ -0,0 +1,78 @@ +import pandas as pd +import os +from typing import List, Dict, Set, Tuple +from datetime import datetime +from pathlib import Path + +class CSVStorage: + """CSV-based storage for scraping results""" + + def __init__(self, data_dir: str = "data"): + self.data_dir = Path(data_dir) + self.data_dir.mkdir(exist_ok=True) + + def get_filename(self, scraper_name: str) -> Path: + """Get CSV filename for scraper""" + return self.data_dir / f"{scraper_name}_results.csv" + + def load_previous_results(self, scraper_name: str) -> Set[str]: + """Load previous result hashes""" + filename = self.get_filename(scraper_name) + if not filename.exists(): + return set() + + try: + df = pd.read_csv(filename) + return set(df['hash'].dropna().unique()) + except Exception as e: + print(f"Fehler beim Laden vorheriger Ergebnisse: {e}") + return set() + + def save_results(self, scraper_name: str, results: List[Dict]) -> None: + """Save results to CSV""" + if not results: + print(f"Keine Ergebnisse für {scraper_name}") + return + + filename = self.get_filename(scraper_name) + + # Convert to DataFrame + df = pd.DataFrame(results) + + # Append to existing file or create new one + if filename.exists(): + df.to_csv(filename, mode='a', header=False, index=False) + else: + df.to_csv(filename, index=False) + + print(f"{len(results)} Ergebnisse für {scraper_name} gespeichert") + + def compare_results(self, scraper_name: str, new_results: List[Dict]) -> Tuple[List[Dict], List[Dict]]: + """Compare new results with previous ones""" + previous_hashes = self.load_previous_results(scraper_name) + new_hashes = {result['hash'] for result in new_results} + + # Find new results + new_items = [result for result in new_results if result['hash'] not in previous_hashes] + + # Find removed results (optional, for reporting) + removed_hashes = previous_hashes - new_hashes + removed_items = [] # We don't have the full data for removed items + + return new_items, removed_items + + def get_latest_results(self, scraper_name: str, limit: int = 50) -> pd.DataFrame: + """Get latest results from CSV""" + filename = self.get_filename(scraper_name) + if not filename.exists(): + return pd.DataFrame() + + try: + df = pd.read_csv(filename) + # Sort by scrape_time descending and get latest + if 'scrape_time' in df.columns: + df = df.sort_values('scrape_time', ascending=False) + return df.head(limit) + except Exception as e: + print(f"Fehler beim Lesen der Ergebnisse: {e}") + return pd.DataFrame() diff --git a/test_data/nhg_test_results.csv b/test_data/nhg_test_results.csv new file mode 100644 index 0000000..efffa93 --- /dev/null +++ b/test_data/nhg_test_results.csv @@ -0,0 +1,2 @@ +plz,address,link,scraper,scrape_time,hash +1120,"1120 Wien, Flurschützstraße 5 / 2 / 10",#,NHG Test,2026-02-15T08:13:09.072841,75b2a4c4eb48f8f22047d252320d56f6 diff --git a/test_scraper.py b/test_scraper.py new file mode 100644 index 0000000..4ec55c2 --- /dev/null +++ b/test_scraper.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python3 +""" +Test script for the NHG scraper +""" + +import asyncio +import sys +import os + +# Add src to path +sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src')) + +from scrapers.nhg_scraper import NHGScraper +from storage.csv_storage import CSVStorage + +async def test_nhg_scraper(): + """Test the NHG scraper with a single PLZ""" + print("Testing NHG Scraper...") + + config = { + 'name': 'NHG Test', + 'url': 'https://nhg.at/immobilienangebot/wohnungsangebot/', + 'search_params': { + 'plz_list': ['1120 Wien'] # Test with full PLZ name + } + } + + scraper = NHGScraper(config) + + try: + results = await scraper.scrape() + print(f"Found {len(results)} results:") + + for result in results: + print(f" PLZ: {result.get('plz')}") + print(f" Address: {result.get('address')}") + print(f" Link: {result.get('link')}") + print(f" Hash: {result.get('hash')}") + print("-" * 40) + + # Test storage + storage = CSVStorage('test_data') + new_results, removed_results = storage.compare_results('nhg_test', results) + + print(f"New results: {len(new_results)}") + print(f"Removed results: {len(removed_results)}") + + # Save results + storage.save_results('nhg_test', results) + + return True + + except Exception as e: + print(f"Error: {e}") + import traceback + traceback.print_exc() + return False + +if __name__ == "__main__": + success = asyncio.run(test_nhg_scraper()) + sys.exit(0 if success else 1)