Dieses Projekt vergleicht die Extraktionsgeschwindigkeit und Effizienz zweier Web-Scraper:
bl_scraper.py
: ein synchroner Web-Scraper mitrequests
undBeautifulSoup
.ai_scraper.py
: ein asynchroner Web-Scraper mitaiohttp
undasyncio
.
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.
-
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
- Klone das Repository:
git clone <repository-url> cd KI-Web-Scraper
- Stelle sicher, dass Python 3.13.4 installiert ist:
python --version
- Erstelle und aktiviere die virtuelle Umgebung:
python -m venv .venv .venv\Scripts\Activate.ps1
- Installiere Abhängigkeiten:
pip install requests beautifulsoup4 pandas pytest asyncio aiohttp matplotlib pillow
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.
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.
python gui_app.py
- 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.
.lasturls
: speichert letzte URL-Eingaben..lastpath
: merkt sich zuletzt geöffnete Ordner für Datei-Dialoge.
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
Die asynchronen Funktionen können auch innerhalb von Jupyter Notebooks getestet werden. Wichtig ist die Nutzung von nest_asyncio
, um mehrere Event Loops zuzulassen:
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
Nach dem Durchlauf werden folgende Dateien erzeugt:
ai_output_1.csv
,bl_output_1.csv
, …: Ergebnisdateien mith1
/h2
-Tags.scraper_compare.png
: Automatisch erzeugtes Diagramm zum Vergleich der Laufzeiten pro URL.
Dieses Repository ist unter der MIT-Lizenz veröffentlicht. Es ist zu Lernzwecken erstellt. Inhalte und Code dürfen frei verwendet und angepasst werden.