Chat
Ask me anything
Ithy Logo
Sign in to save

Monitorowanie zgromadzeń publicznych

Szybkie rozwiązania powiadamiające o nowych treściach i umożliwiające eksport danych do Excela

cityscape public announcement board

Główne wyróżniki

  • Szybkie powiadomienia – System alertów w momencie pojawienia się nowej treści
  • Wydobywanie szczegółów – Informacje o dacie i miejscu zgromadzenia w powiadomieniu
  • Eksport do Excela – Automatyczne zapisanie zgłoszonych danych do arkusza kalkulacyjnego

Wprowadzenie do rozwiązania

W obliczu dynamicznych zmian informacyjnych na stronach ogłoszeniowych, szczególnie tych dotyczących zgromadzeń publicznych w Warszawie, istnieje potrzeba stworzenia rozwiązania, które automatycznie monitoruje stronę, wyłapuje nowe wpisy oraz dostarcza szybkie powiadomienia wraz ze szczegółowym opisem zgromadzeń. W praktyce oznacza to, że system powinien wykrywać zmiany w treści strony wraz z podstronami, analizować daty oraz miejsca zgromadzeń, a następnie finalizować dane do pliku Excel, ułatwiając dalszą analizę.


Rozwiązania i technologie

W dzisiejszych czasach dostępnych jest wiele narzędzi oraz bibliotek programistycznych, dzięki którym możliwe jest stworzenie kompleksowego systemu monitorowania treści. Podstawowym podejściem jest napisanie skryptu w języku Python, który korzysta z bibliotek do pobierania zawartości strony (np. requests) oraz jej parsowania (np. BeautifulSoup). Warto również zaznaczyć, iż system powiadamiania może wykorzystywać zarówno e-mail, systemowe alerty (na przykład za pomocą bibliotek desktopowych), a także narzędzia monitorujące zmiany na stronach, które automatyzują tę pracę.

Główne komponenty rozwiązania

  • Monitorowanie strony – Skrypt regularnie wysyła żądania HTTP do strony i porównuje bieżącą zawartość z poprzednią wersją.
  • Wyodrębnianie danych – Użycie Parsera HTML do pobierania dat i lokalizacji zgromadzeń.
  • Powiadomienia – System alertów za pomocą e-mail lub natywnych powiadomień systemowych (desktopowych).
  • Eksport danych – Automatyczne zapisywanie zgłoszonych wydarzeń do arkusza kalkulacyjnego, np. w formacie Excel, przy użyciu biblioteki jak pandas lub openpyxl.

Przykładowa implementacja w Pythonie

Poniżej przedstawiam przykładowy skrypt napisany w języku Python, który realizuje wszystkie wymienione funkcjonalności. Skrypt ten:

  • Pobiera dane z dedykowanej strony
  • Przetwarza ich strukturę HTML i wyłuskuje kluczowe informacje dotyczące zgromadzeń (data, miejsce)
  • Sprawdza, czy pojawiły się nowe zgromadzenia w porównaniu z poprzednimi zapytaniami
  • Wysyła alert oraz zapisuje dane do pliku Excel

Kod skryptu

Instalacja niezbędnych bibliotek

Aby uruchomić poniższy skrypt, upewnij się, że masz zainstalowane następujące biblioteki Python:

  • requests
  • beautifulsoup4
  • pandas
  • openpyxl
  • smtplib (wbudowany w Pythona)

Instalację bibliotek zewnętrznych możesz wykonać za pomocą polecenia pip, np.:


# pip install requests beautifulsoup4 pandas openpyxl
  

Kod skryptu monitorującego


# Importowanie niezbędnych modułów
import requests
from bs4 import BeautifulSoup
import pandas as pd
import smtplib
import time
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import os

# Konfiguracja danych powiadomień e-mail
EMAIL_ADDRESS = "twoj_email@gmail.com"  # Podaj swój adres e-mail
EMAIL_PASSWORD = "twoje_haslo"           # Podaj hasło do swojego konta e-mail
RECIPIENT_EMAIL = "odbiorca@example.com"  # Adres e-mail odbiorcy powiadomień

# URL strony do monitorowania
URL = "https://bip.um.warszawa.pl/ogloszenia-obwieszczenia-zawiadomienia?_pl_xentivo_um_bip_webcontent_search_portlet_WebContentSearchPortlet_INSTANCE_4wcLmy696HrZ_cur=1"

# Funkcja wysyłająca email z powiadomieniem o nowym zgromadzeniu
def wyslij_powiadomienie(tresc):
    msg = MIMEMultipart()
    msg["From"] = EMAIL_ADDRESS
    msg["To"] = RECIPIENT_EMAIL
    msg["Subject"] = "Nowe zgromadzenie publiczne w Warszawie"
    msg.attach(MIMEText(tresc, "plain"))
    
    server = smtplib.SMTP("smtp.gmail.com", 587)
    server.starttls()
    server.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
    server.sendmail(EMAIL_ADDRESS, RECIPIENT_EMAIL, msg.as_string())
    server.quit()

# Funkcja parsująca stronę i wyodrębniająca informacje o zgromadzeniach
def parsuj_strone(url):
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")
    
    # Dostosuj selektory do faktycznej struktury strony
    # Przykładowo, przyjmujemy, że każdy wpis dotyczy zgromadzenia publicznego
    zgromadzenia = soup.find_all("div", class_="zgromadzenie")  # Upewnij się, że klasa jest poprawna
    
    znalezione_zgromadzenia = []
    for zgromadzenie in zgromadzenia:
        try:
            # Wyodrębnianie informacji: data i lokalizacja
            data = zgromadzenie.find("span", class_="data").text.strip()
            miejsce = zgromadzenie.find("span", class_="miejsce").text.strip()
            # Możesz dodać inne informacje, np. szczegóły zgromadzenia
            znalezione_zgromadzenia.append({"Data": data, "Miejsce": miejsce})
        except Exception as e:
            # Obsługa wyjątków, gdy struktura HTML nie jest zgodna z oczekiwaniami
            continue
    return znalezione_zgromadzenia

# Funkcja zapisująca dane do pliku Excel
def eksport_do_excela(dane, nazwa_pliku="zgromadzenia.xlsx"):
    df = pd.DataFrame(dane)
    if os.path.exists(nazwa_pliku):
        # Dopisanie do istniejącego arkusza
        with pd.ExcelWriter(nazwa_pliku, engine="openpyxl", mode="a", if_sheet_exists="overlay") as writer:
            df.to_excel(writer, index=False, header=False)
    else:
        df.to_excel(nazwa_pliku, index=False)

# Główna funkcja monitorująca zmiany w treści strony
def monitoruj():
    poprzednie_zgromadzenia = []
    
    while True:
        nowe_zgromadzenia = parsuj_strone(URL)
        
        # Wyczyść duplikaty i porównaj nowe dane z poprzednimi
        zbior_nowych = set((z["Data"], z["Miejsce"]) for z in nowe_zgromadzenia)
        zbior_poprzednich = set((z["Data"], z["Miejsce"]) for z in poprzednie_zgromadzenia)
        nowosci = [z for z in nowe_zgromadzenia if (z["Data"], z["Miejsce"]) not in zbior_poprzednich]
        
        if nowosci:
            tresc = "Nowe zgromadzenie publiczne wykryte:\n"
            for z in nowosci:
                tresc += f"Data: {z['Data']}, Miejsce: {z['Miejsce']}\n"
            
            # Wysłanie powiadomienia email
            wyslij_powiadomienie(tresc)
            # Eksport danych do Excela
            eksport_do_excela(nowosci)
            print("Wykryto nowości i wysłano powiadomienie.")
        
        # Aktualizuj listę zgromadzeń
        poprzednie_zgromadzenia = nowe_zgromadzenia
        
        # Oczekiwanie przed kolejnym sprawdzeniem (możesz dostosować czas)
        time.sleep(3600)  # 3600 sekund = 1 godzina

if __name__ == "__main__":
    monitoruj()
  

Dodatkowe opcje i alternatywy

Oprócz napisanego skryptu w Pythonie, warto rozważyć zastosowanie specjalistycznych narzędzi do monitorowania stron internetowych, które oferują automatyczne wykrywanie zmian oraz konfigurację powiadomień:

Gotowe rozwiązania

Narzędzia tego typu pozwalają na:

  • Monitorowanie określonych obszarów strony, co minimalizuje wykrywanie nieistotnych zmian.
  • Konfigurację powiadomień przez e-mail, SMS, lub integrację z platformami komunikacyjnymi (np. Discord, Slack).
  • Eksport korelacji zmian do plików CSV lub Excel, co umożliwia szybkie raportowanie.

Systemy te eliminują również konieczność obsługi pętli monitorującej oraz zarządzania serwerem – rozwiązanie jest z reguły wdrażane w modelu SaaS.

Monitorowanie podstron

Być może interesuje Cię również śledzenie zmian na podstronach, które mogą zawierać dodatkowe informacje lub szczegóły dotyczące zgromadzeń. W tym przypadku rozbudowując skrypt, można dodać:

  • Funkcję rekurencyjnego przeszukiwania linków znajdujących się na stronie głównej. Po wykryciu linku, który kieruje do podstrony, skrypt wykonuje analogiczną procedurę parsowania.
  • Agregację danych ze wszystkich podstron do jednej centralnej bazy, którą następnie eksportuje się do Excela.

Tabela porównawcza funkcji implementacyjnych

Funkcjonalność Skrypt w Pythonie Narzędzie SaaS
Monitorowanie głównej strony Tak – przy użyciu requests i BeautifulSoup Tak – konfiguracja obszaru monitorowanego
Wykrywanie nowych treści Porównanie poprzedniej wersji z bieżącą Wbudowane algorytmy detekcji zmian
Powiadomienia o nowościach Email i alerty systemowe Wieloformatowe powiadomienia (e-mail, SMS, API)
Eksport do Excela Użycie pandas i openpyxl Opcja zapisu raportu lub eksportu danych
Monitorowanie podstron Możliwe – wymaga rekurencyjnej logiki Opcję konfiguracji obszarów monitorowania

Kwestie praktyczne i aspekty etyczne

Podczas implementacji systemu monitorującego warto pamiętać o kilku istotnych aspektach:

  • Rygor polityki strony – Upewnij się, że regularne pobieranie zasobów stron nie narusza zasad użytkowania witryny ani przepisów prawnych (np. dotyczących scrapingu danych).
  • Optymalizacja zapytań HTTP – Wybierając interwały do monitorowania, należy znaleźć kompromis między częstotliwością a obciążeniem serwera.
  • Bezpieczeństwo – W przypadku korzystania z danych logowania w kodzie, przechowuj je w sposób bezpieczny, stosując zmienne środowiskowe lub dedykowany system zarządzania sekretami.

Pamiętaj również, że w systemach automatycznych powiadomień istotna jest jakość filtrowania informacji, aby unikać alarmów w przypadku drobnych aktualizacji, które nie wpływają na kluczowe dane.


Integracja z workflow

System monitorowania może być zintegrowany z innymi narzędziami używanymi w firmie lub przez osoby prywatne na wielu płaszczyznach:

Integracja z systemem powiadomień

Skrypt może wysyłać alerty email, ale także:

  • Powiadomienia systemowe używające bibliotek takich jak plyer lub notify2 (na systemach Linux).
  • Integracja z komunikatorami np. przez API Discord lub Slack, umożliwiając natychmiastowe przesłanie wiadomości do dedykowanego kanału.

Agregacja i analiza danych

Dane zapisane do Excela mogą być następnie wykorzystywane:

  • W celu analizy trendów zgłoszeń
  • Do tworzenia raportów i wizualizacji w narzędziach BI, takich jak Power BI lub Tableau
  • Jako podstawa do generowania statystyk dotyczących liczby zgromadzeń w określonych okresach i lokalizacjach

Podsumowanie funkcjonalności

Prezentowany system monitorowania zgromadzeń publicznych w Warszawie jest elastycznym narzędziem, które może być dostosowane do konkretnych potrzeb. Zapewnia:

  • Automatyczne wyszukiwanie i detekcję nowych treści
  • Szybkie powiadomienia o istotnych zmianach na stronie
  • Wydobycie kluczowych danych – informacje o dacie i lokalizacji zgromadzenia
  • Możliwość eksportu zgłoszonych danych do pliku Excel, co ułatwia dalszą analizę i archiwizację

Dzięki zastosowaniu zarówno rozwiązań dedykowanych w systemach SaaS, jak i samodzielnie napisanych skryptów, można wybrać najbardziej optymalne podejście dopasowane do indywidualnych warunków oraz środowiska pracy.


Rekomendowane materiały i dalsze kroki

Poniżej znajdziesz listę najważniejszych źródeł, które mogą dostarczyć dodatkowych informacji technicznych oraz przykładów wdrożenia narzędzi monitorujących:

References

Recommended Further Queries


Last updated March 4, 2025

AI-assisted research. Sources, methodology and corrections · Source-checked guides and tools · Explore published answers

Ask Ithy AI
Download Article
Delete Article