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)