Dies ist eine alte Version des Dokuments!
Ein Crawler ist ein Programm, das automatisiert Inhalte aus dem Internet oder aus anderen digitalen Quellen durchsucht. Ziel ist es, Informationen systematisch zu erfassen, zu analysieren und für weitere Zwecke bereitzustellen. Crawler werden häufig von Suchmaschinen, Monitoring-Systemen, Data-Mining-Anwendungen und Web-Archiven eingesetzt.
Ein Crawler beginnt meist mit einer Liste von Startadressen, den sogenannten Seeds. Von dort ruft er Dokumente ab, liest deren Inhalte und extrahiert weitere Verweise, die anschließend ebenfalls besucht werden. Auf diese Weise bewegt sich der Crawler schrittweise durch ein Netz aus verlinkten Ressourcen.
Der Ablauf besteht typischerweise aus folgenden Schritten:
- Abruf einer Seite oder Ressource
- Analyse des Inhalts
- Extraktion von Links oder Metadaten
- Speicherung der gefundenen Informationen
- Aufnahme neuer Ziele in eine Warteschlange
Dieses Verfahren wird wiederholt, bis definierte Grenzen erreicht sind, etwa eine maximale Anzahl von Seiten, eine bestimmte Tiefe oder ein Zeitlimit.
import requests from urllib.parse import urljoin, urlparse, urldefrag, parse_qs from bs4 import BeautifulSoup # Liste unerwünschter Query-Parameter und Dateiendungen blocked_query_params = ['to','show','last','login','register','sort','start','by'] blocked_extensions = ['.pdf', '.jpg', '.png', '.zip', '.exe'] def is_blocked_url(url): """ Diese Funktion prüft, ob eine URL unerwünschte Query-Parameter oder Dateiendungen enthält. """ # URL parsen parsed_url = urlparse(url) # Prüfen auf unerwünschte Query-Parameter query_params = parse_qs(parsed_url.query) for param in query_params: if param in blocked_query_params: return True # Prüfen auf unerwünschte Dateiendungen if any(url.endswith(ext) for ext in blocked_extensions): return True return False def crawl(start_url, base_url): """ Diese Funktion crawlt die angegebene URL, extrahiert Links und verarbeitet sie. """ visited_urls = set() queue = [start_url] while queue: current_url = queue.pop(0) if current_url in visited_urls: continue # URL parsen und fragment entfernen full_url, _ = urldefrag(current_url) #print(f"Testing {full_url}") # Filtern der unerwünschten URLs if is_blocked_url(full_url): #print(f"Skipping blocked URL: {full_url}") continue # Markiere die URL als besucht visited_urls.add(full_url) print(f"Processing URL: {full_url}") # Hole die HTML-Seite try: response = requests.get(full_url) if response.status_code != 200: print(f"Failed to fetch {full_url}: {response.status_code}") continue page_content = response.text soup = BeautifulSoup(page_content, 'html.parser') # Finde alle Links auf der Seite a_links = soup.find_all('a', href=True) # Verarbeite die Links for link in a_links: href = link.get('href') if href: # Absolute URL erstellen next_url = urljoin(base_url, href) if next_url not in visited_urls: #print(f' Adding {next_url} to the queue') queue.append(next_url) except requests.RequestException as e: print(f"Error fetching {full_url}: {e}") print(f"Visited {len(visited_urls)} URLs.") # Start URL und Basis-URL für den Crawl-Prozess start_url = 'https://codehelper.lima-city.at' # Ändere dies auf die Start-URL base_url = start_url # Die Basis-URL für die relativen Links # Crawlen der Seite crawl(start_url, base_url)