CodeGym /Java Kurs /Python SELF DE /Automatisierung von zeitbasierten Aufgaben für regelmäßig...

Automatisierung von zeitbasierten Aufgaben für regelmäßiges Datensammeln

Python SELF DE
Level 40 , Lektion 1
Verfügbar

1. Arbeiten mit einer Wetter-API

Jetzt, wo wir die Grundlagen gelernt haben, schauen wir uns ein realistisches Szenario an. Stell dir vor, wir müssen alle 30 Minuten Wetterdaten sammeln. Dafür nutzen wir eine Wetter-API. Natürlich ist die Nutzung einer echten API in Lernzwecken oft eingeschränkt, daher simulieren wir, wie das aussehen könnte.

Aktuelles Wetter mit der OpenWeather API abrufen

Dieses Beispiel zeigt, wie man mit requests Wetterdaten für eine bestimmte Stadt mit der OpenWeather API abruft.

Python

import schedule
import time
import requests

def fetch_weather(city):
    api_key = "YOUR_API_KEY"  # Ersetze durch deinen API-Schlüssel von OpenWeather
    url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"

    try:
        response = requests.get(url)
        response.raise_for_status()
        data = response.json()
        temperature = data["main"]["temp"]
        weather_description = data["weather"][0]["description"]
        print(f"Aktuelle Temperatur in {city}: {temperature}°C")
        print(f"Wetterbeschreibung: {weather_description}")
    except requests.exceptions.RequestException as e:
        print(f"Fehler beim Abrufen der Wetterdaten: {e}")

def fetch_weather_of_london():
    fetch_weather("London")

# Einstellung der Aufgabe alle 30 Minuten
schedule.every(30).minutes.do(fetch_weather_of_london)

while True:
    schedule.run_pending()
    time.sleep(1)

Hier senden wir eine GET-Anfrage an die OpenWeather API, um die aktuellen Wetterdaten für eine bestimmte Stadt abzurufen. Aus der JSON-Antwort entnehmen wir die Temperatur und die Wetterbeschreibung und geben sie aus. Vergiss nicht, YOUR_API_KEY durch deinen API-Schlüssel zu ersetzen.

Aktuelle Wechselkurse mit einer API abrufen

In diesem Beispiel nutzen wir requests, um die aktuellen Wechselkurse über eine API abzurufen.

Python

import schedule
import time
import requests

def fetch_exchange_rate():
    url = "https://api.exchangerate-api.com/v4/latest/USD"
    try:
        response = requests.get(url)
        response.raise_for_status()  # Überprüfen, ob die Anfrage erfolgreich war
        data = response.json()
        usd_to_eur = data["rates"]["EUR"]
        print(f"Aktueller USD zu EUR Wechselkurs: {usd_to_eur}")
    except requests.exceptions.RequestException as e:
        print(f"Fehler beim Abrufen der Daten: {e}")

# Einstellung der Aufgabe alle 10 Minuten
schedule.every(10).minutes.do(fetch_exchange_rate)

while True:
    schedule.run_pending()
    time.sleep(1)

Hier senden wir eine GET-Anfrage an die API für Wechselkurse und erhalten die Daten im JSON-Format. Der Wechselkurs von USD zu EUR wird aus der JSON-Antwort extrahiert und ausgegeben. Dieses Skript kann angepasst werden, um Daten für andere Währungspaare zu sammeln, indem der Schlüssel in data["rates"] geändert wird.

Mit diesen Skripten können wir kontinuierlich Wetter- und Währungsdaten sammeln. Nicht schlecht für den Anfang, oder?

Reale Anwendungsszenarien

Die Automatisierung der Datensammlung kann in verschiedenen Szenarien nützlich sein:

  • Serverzustandsüberwachung: Automatische Serverzustandsprüfungen können Probleme erkennen und verhindern, bevor sie auftreten.
  • Datensammlung zu sozialen Medien: Kontinuierliche Analyse von Trends und Markenerwähnungen.
  • Überwachung von Wechselkursen: Änderungen der Wechselkurse können für Unternehmen oder den persönlichen Gebrauch nützlich sein.

2. Beispiel für automatisierte Web-Datensammlung

Was, wenn wir Daten von einer Webseite sammeln wollen? Zum Beispiel regelmäßig nach Nachrichten schauen. Hier kommt uns BeautifulSoup und requests zur Hilfe.

Daten von einer Webseite sammeln

Angenommen, wir möchten von einer Webseite Nachrichtentitel abrufen. So könnte man das machen:

Python

import requests
from bs4 import BeautifulSoup

def fetch_news():
    response = requests.get("http://example.com/news")
    soup = BeautifulSoup(response.content, 'html.parser')
    for headline in soup.find_all('h2', class_='news'):
        print(headline.text)

schedule.every().hour.do(fetch_news)

while True:
    schedule.run_pending()
    time.sleep(1)

In diesem Beispiel überprüft unser Skript alle 60 Minuten die Webseite und gibt die Nachrichtentitel aus. Das vereinfacht den Prozess, aktuelle Informationen zu erhalten.

Nachrichtentitel von einer Webseite abrufen

In diesem Beispiel nutzen wir requests, um die HTML-Webseite herunterzuladen, und BeautifulSoup, um die Nachrichtentitel zu parsen.

Python

import requests
from bs4 import BeautifulSoup

def fetch_news_headlines():
    url = "https://www.bbc.com/news"
    try:
        response = requests.get(url)
        response.raise_for_status()
        soup = BeautifulSoup(response.text, 'html.parser')
        
        headlines = soup.find_all('h3')  # Suche nach allen <h3>-Tags (wo oft die Titel stehen)
        print("Letzte Nachrichten auf BBC:")
        for headline in headlines[:5]:  # Erste 5 Titel nehmen
            print("-", headline.get_text(strip=True))
    except requests.exceptions.RequestException as e:
        print(f"Fehler beim Abrufen der Daten: {e}")

fetch_news_headlines()

Hier laden wir die BBC-News-Seite herunter und suchen mit BeautifulSoup nach allen <h3>-Tags, wo die Nachrichtentitel stehen. Wir geben die ersten 5 Titel aus und entfernen unnötige Leerzeichen und Zeichen mit strip=True.

Preisdaten von einem Online-Shop abrufen

Dieses Beispiel zeigt, wie man Preisdaten von einer Webseite eines Online-Shops (z. B. Amazon oder einem anderen Shop) extrahiert. Wir nutzen requests, um die Seite abzufragen, und BeautifulSoup, um die Preise zu parsen.

Python

import requests
from bs4 import BeautifulSoup

def fetch_product_price(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"
    }
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
        
        soup = BeautifulSoup(response.text, 'html.parser')
        product_name = soup.find('span', {'id': 'productTitle'}).get_text(strip=True)
        price = soup.find('span', {'class': 'a-price-whole'}).get_text(strip=True)
        
        print(f"Produkt: {product_name}")
        print(f"Preis: {price} €")
    except requests.exceptions.RequestException as e:
        print(f"Fehler beim Abrufen der Daten: {e}")
    except AttributeError:
        print("Produkt- oder Preisinformationen konnten nicht gefunden werden")

# Beispiel-Link zu einem Produkt
fetch_product_price("https://www.amazon.com/dp/B08N5WRWNW")

In diesem Beispiel senden wir eine GET-Anfrage mit einem User-Agent-Header, um Blockierungen zu umgehen. Danach suchen wir mit BeautifulSoup den Produktnamen anhand des id="productTitle" und den Produktpreis anhand der Klasse a-price-whole. Mit strip=True entfernen wir unnötige Leerzeichen.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION