Monitorowanie zgromadzeń publicznych
Szybkie rozwiązania powiadamiające o nowych treściach i umożliwiające eksport danych do Excela
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
-
BIP Warszawa - Ogłoszenia
- Visualping – Website Change Detection
- ChangeTower – Monitor Website Changes
- Changedetection.io on GitHub
- Monitoring Website Changes – Open Source
- Python Script to Monitor Website Changes
- Praktyczny przewodnik – Python Monitoring
- Detect Website Change Notification
- Monitorowanie stron internetowych – Guru99
- urlwatch – Monitorowanie stron
Recommended Further Queries
Last updated March 4, 2025