Benutzer-Werkzeuge

Webseiten-Werkzeuge


crawler
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)
crawler.txt · Zuletzt geändert: 2025/07/01 00:11 von jango