CodeGym /Kursy /Python SELF PL /Automatyzacja zadań na podstawie czasu dla regularnego zb...

Automatyzacja zadań na podstawie czasu dla regularnego zbierania danych

Python SELF PL
Poziom 40 , Lekcja 1
Dostępny

1. Praca z pogodowym API

Skoro już opanowaliśmy podstawy, rozważmy realistyczny scenariusz. Wyobraź sobie, że musimy zbierać dane o pogodzie co 30 minut. Do tego wykorzystamy API dostarczające dane pogodowe. Oczywiście w celach edukacyjnych korzystanie z prawdziwego API może być ograniczone, więc załóżmy, jak by to mogło wyglądać.

Pobieranie obecnej pogody przez OpenWeather API

Ten przykład pokazuje, jak za pomocą requests pobrać dane o pogodzie w konkretnym mieście, wykorzystując API OpenWeather.

Python

import schedule
import time
import requests

def fetch_weather(city):
    api_key = "YOUR_API_KEY"  # Zamień na swój API-klucz 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"Obecna temperatura w {city}: {temperature}°C")
        print(f"Opis pogody: {weather_description}")
    except requests.exceptions.RequestException as e:
        print(f"Błąd podczas pobierania danych o pogodzie: {e}")

def fetch_weather_of_london():
    fetch_weather("London")

# Konfiguracja zadania do wykonania co 30 minut
schedule.every(30).minutes.do(fetch_weather_of_london)

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

Tutaj wysyłamy zapytanie GET do API OpenWeather, aby uzyskać bieżącą pogodę dla podanego miasta. W odpowiedzi JSON wyodrębniamy temperaturę i opis pogody, które wyświetlamy na ekranie. Nie zapomnij zamienić YOUR_API_KEY na swój klucz API.

Pobieranie bieżącego kursu walut z API

W tym przykładzie użyjemy requests do pobrania bieżącego kursu walut przez API.

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()  # Sprawdzenie pomyślności wykonania zapytania
        data = response.json()
        usd_to_eur = data["rates"]["EUR"]
        print(f"Bieżący kurs USD do EUR: {usd_to_eur}")
    except requests.exceptions.RequestException as e:
        print(f"Wystąpił błąd podczas pobierania danych: {e}")

# Konfiguracja zadania do wykonania co 10 minut
schedule.every(10).minutes.do(fetch_exchange_rate)

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

Tutaj wysyłamy zapytanie GET do API kursu walut i otrzymujemy dane w formacie JSON. Kurs USD do EUR wyodrębniamy z odpowiedzi JSON i wyświetlamy na ekranie. Ten skrypt można dostosować do zbierania danych innych par walutowych, zmieniając klucz w data["rates"].

Z pomocą tego skryptu możemy stale zbierać dane o pogodzie i walutach. Dobry początek, prawda?

Rzeczywiste scenariusze użycia

Automatyzacja zbierania danych może być przydatna w różnych scenariuszach:

  • Monitorowanie stanu serwerów: Automatyczne sprawdzenia stanu serwera mogą wykryć i ostrzec o problemach zanim się pojawią.
  • Zbieranie danych o mediach społecznościowych: Ciągła analiza trendów i wzmiankowań marek.
  • Śledzenie kursów walut: Zmiany kursów walut mogą być przydatne dla biznesu lub potrzeb osobistych.

2. Przykład zautomatyzowanego zbierania danych z sieci

Co, jeśli chcemy zbierać dane ze strony internetowej? Załóżmy, że regularnie sprawdzamy dostępność wiadomości. Do tego przyda się BeautifulSoup i requests.

Zbieranie danych ze strony internetowej

Załóżmy, że mamy stronę, z której chcemy zbierać nagłówki wiadomości. Oto jak możemy to zrobić:

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)

W tym przykładzie widać, że co 60 minut nasz skrypt sprawdza stronę internetową i wyświetla nagłówki wiadomości. Ułatwia to proces uzyskiwania aktualnych informacji.

Zbieranie nagłówków wiadomości z witryny

W tym przykładzie użyjemy requests do załadowania HTML strony i BeautifulSoup do parsowania nagłówków wiadomości.

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')  # Szukanie wszystkich tagów <h3> (gdzie zwykle są nagłówki)
        print("Ostatnie nagłówki wiadomości na BBC:")
        for headline in headlines[:5]:  # Pobieramy pierwsze 5 nagłówków
            print("-", headline.get_text(strip=True))
    except requests.exceptions.RequestException as e:
        print(f"Błąd podczas pobierania danych: {e}")

fetch_news_headlines()

Tutaj ładujemy stronę BBC News i za pomocą BeautifulSoup szukamy wszystkich tagów <h3>, gdzie są nagłówki wiadomości. Wyświetlamy pierwsze 5 nagłówków, usuwając zbędne spacje i symbole za pomocą strip=True.

Zbieranie danych o cenach produktów ze sklepu internetowego

Ten przykład pokazuje, jak wydobywać dane o cenach produktów ze strony sklepu internetowego (np. Amazonu lub innego sklepu). Używamy requests do zapytania strony i BeautifulSoup do parsowania cen.

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"Cena: {price} zł")
    except requests.exceptions.RequestException as e:
        print(f"Błąd podczas pobierania danych: {e}")
    except AttributeError:
        print("Nie udało się znaleźć informacji o produkcie lub cenie")

# Przykładowy link do produktu
fetch_product_price("https://www.amazon.com/dp/B08N5WRWNW")

W tym przykładzie wysyłamy zapytanie GET z nagłówkiem User-Agent, aby uniknąć blokad. Następnie, używając BeautifulSoup, szukamy nazwy produktu według id="productTitle" i ceny produktu według klasy a-price-whole. Używamy strip=True do usuwania zbędnych spacji.

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