Skip to content

Vergleich synchroner und asynchroner Web-Scraping-Methoden (h1/h2 Extraktion) mit Python

License

Notifications You must be signed in to change notification settings

franzsteinkress/KI-Web-Scraper

Repository files navigation

KI-Web-Scraper

Python VS Code License

Vergleich synchroner und asynchroner Web-Scraping-Methoden (h1/h2 Extraktion)

Dieses Projekt vergleicht die Extraktionsgeschwindigkeit und Effizienz zweier Web-Scraper:

  • bl_scraper.py: ein synchroner Web-Scraper mit requests und BeautifulSoup.
  • ai_scraper.py: ein asynchroner Web-Scraper mit aiohttp und asyncio.

Beide Skripte durchsuchen bis zu fünf definierbare URLs jeweils fünfmal nach h1- und h2-Tags und speichern die Ergebnisse in CSV-Dateien. Die durchschnittliche Laufzeit pro URL wird berechnet und kann mit einer GUI visuell verglichen werden.

KI-Web-Scraper

Voraussetzungen

  • Python ≥ 3.10 (getestet mit 3.13.4)

  • Virtuelle Umgebung (empfohlen): .venv

  • Installation per pip:

    pip install requests beautifulsoup4 pandas pytest asyncio aiohttp matplotlib pillow

Installation

  1. Klone das Repository:
    git clone <repository-url>
    cd KI-Web-Scraper
  2. Stelle sicher, dass Python 3.13.4 installiert ist:
    python --version
  3. Erstelle und aktiviere die virtuelle Umgebung:
    python -m venv .venv
    .venv\Scripts\Activate.ps1
  4. Installiere Abhängigkeiten:
    pip install requests beautifulsoup4 pandas pytest asyncio aiohttp matplotlib pillow

CLI-Nutzung (Command Line Interface)

bl_scraper.py – synchroner Scraper

python bl_scraper.py
  • Führt synchrones Scraping für alle angegebenen URLs durch.
  • Speichert Ergebnisse in outputs/<Zeitstempel>/bl_output_*.csv.
  • Gibt durchschnittliche Extraktionszeiten pro URL aus.

ai_scraper.py – asynchroner Scraper

python ai_scraper.py
  • Führt asynchrones Scraping mit aiohttp durch.
  • Ergebnisse analog zu bl_scraper.py.
  • Erwartung: signifikant schnellere Verarbeitung.

Beide Skripte fordern die URLs automatisch über eine im Ordner gespeicherte urls.txt an oder können intern per Übergabe verwendet werden.

GUI: gui_app.py – Interaktive Benutzeroberfläche

python gui_app.py

Funktionen

  • Eingabefelder für bis zu 5 URLs.
  • Speicherung und Wiederherstellung letzter URL-Eingaben (.lasturls).
  • Automatischer Vergleich beider Scraper mit 5 Durchläufen pro URL.
  • CSV-Ergebnisse und ein Balkendiagramm werden erzeugt.
  • Darstellung des Diagramms direkt im Interface.
  • CSV-Dateien im GUI-Viewer ladbar.
  • Fortschrittsanzeige: Der Button wird während des Prozesses deaktiviert.

Dateien im Hintergrund

  • .lasturls: speichert letzte URL-Eingaben.
  • .lastpath: merkt sich zuletzt geöffnete Ordner für Datei-Dialoge.

Dateistruktur

KI-Web-Scraper/
│
├── ai_scraper.py           # Asynchroner Web-Scraper
├── bl_scraper.py           # Synchroner Web-Scraper
├── gui_app.py              # Tkinter GUI zur Visualisierung
├── plot_results.py         # (optional) Standalone-Plotter
├── requirements.txt        # Abhängigkeiten
│
├── outputs/                # Ausgabeordner
│   └── 2025-07-11_13-45-01/
│       ├── urls.txt
│       ├── ai_output_*.csv
│       ├── bl_output_*.csv
│       └── scraper_compare.png
│
├── .lasturls               # Letzte eingegebene URLs
├── .lastpath               # Letzter geöffneter Ordnerpfad
└── README.md               # Diese Datei

Jupyter Notebook Kompatibilität

Die asynchronen Funktionen können auch innerhalb von Jupyter Notebooks getestet werden. Wichtig ist die Nutzung von nest_asyncio, um mehrere Event Loops zuzulassen:

Beispiel:

import nest_asyncio
nest_asyncio.apply()

import asyncio
from ai_scraper import main as ai_scraper_main

urls = ["https://example.com", "https://python.org"]
await ai_scraper_main(urls, output_dir="outputs/jupyter_test")

Hinweis: await funktioniert in Jupyter erst nach Anwendung von nest_asyncio.

Installation bei Bedarf:

pip install nest_asyncio

Beispielergebnisse

Nach dem Durchlauf werden folgende Dateien erzeugt:

  • ai_output_1.csv, bl_output_1.csv, …: Ergebnisdateien mit h1/h2-Tags.
  • scraper_compare.png: Automatisch erzeugtes Diagramm zum Vergleich der Laufzeiten pro URL.

Bestätigungsdialog

Lizenz

Dieses Repository ist unter der MIT-Lizenz veröffentlicht. Es ist zu Lernzwecken erstellt. Inhalte und Code dürfen frei verwendet und angepasst werden.

About

Vergleich synchroner und asynchroner Web-Scraping-Methoden (h1/h2 Extraktion) mit Python

htps://steinkress.com

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages