Aplikacja desktopowa napisana w Pythonie z użyciem PyQt5 i matplotlib do porównywania ofert z OLX i Otomoto.
Główne okno aplikacji do wyszukiwania i porównywania ofert z OLX i Otomoto.
__init__– Inicjalizuje UI, ładuje kategorie, dodaje przyciski.zaladuj_styl()– Ładuje styl z pliku.qss.on_kategoria_change(kategoria)– Uaktualnia podkategorie po zmianie kategorii.on_zrodlo_change(zrodlo)– Przełącza źródło (OLX/Otomoto), ładuje odpowiednie kategorie.load_kategorie(zrodlo)– Wczytuje plik JSON z kategoriami.szukaj_ofert()– Uruchamia scraper z wybranymi parametrami.analizuj_oferty()– Otwiera okno analizy ofert.porownaj_oferty()– Otwiera okno porównania OLX vs Otomoto.
Serwis odpowiadający za budowę URL-i i uruchamianie scraperów dla OLX i Otomoto.
__init__(rodzic=None)– Inicjalizuje serwis.zbuduj_url(kategoria, fraza=None, podkategoria="", zrodlo="OLX")– Buduje adres URL do wyszukiwania ofert na podstawie kategorii, podkategorii i frazy.formatuj_kategorie(text)– Formatuje nazwę kategorii/podkategorii do formatu URL (usuwa polskie znaki i znaki specjalne).uruchom_scraper(url, kategoria, podkategoria="", zrodlo="OLX")– Asynchronicznie uruchamia odpowiedni scraper (olxScraperlubotomotoScraper) i zwraca znalezione oferty.
Okno aplikacji do analizy ofert na podstawie wybranej frazy, kategorii i podkategorii.
__init__(fraza, kategoria, podkategoria, rodzic=None)– Inicjalizuje okno analizy i ładuje dane.init_ui()– Buduje interfejs użytkownika, w tym filtry cenowe i wykresy._dodaj_wykres_do_layoutu(wykres, layout)– Dodaje wykres Plotly do layoutu.odswiez_ogloszenia()– Filtruje i wyświetla listę ofert w określonym zakresie cenowym.closeEvent(zdarzenie)– Obsługuje zamknięcie okna, przywracając widoczność rodzica.
Serwis obsługujący przetwarzanie danych i generowanie wykresów dla okna analizy ofert.
wczytaj_dane()– Ładuje dane ofert z bazy SQLite.filtruj_oferty(df, fraza, kategoria, podkategoria)– Filtruje oferty wg frazy, kategorii i podkategorii.oblicz_statystyki(df)– Oblicza podstawowe statystyki cenowe.generuj_histogram(df, tytul)– Tworzy histogram cen z ograniczeniem do 95 percentyla.generuj_boxplot(df, tytul)– Tworzy wykres typu boxplot cen z ograniczeniem do 95 percentyla.
Okno porównania ofert OLX i Otomoto z wykresem słupkowym średnich cen.
__init__(serwis, fraza, kategoria, podkategoria, rodzic=None)— inicjalizuje okno.init_ui()— tworzy interfejs.wykonaj_porownanie()— pobiera dane porównawcze i rysuje wykres słupkowy średnich.
Serwis do porównywania ofert OLX i Otomoto oraz rysowania wykresów.
porownaj_oferty(serwis, fraza, kategoria, podkategoria, rodzic=None)- Pobiera i porównuje ceny z bazy na podstawie frazy, kategorii i podkategorii. Zwraca słownik z nazwami serwisów, średnimi cenami i tytułem wykresu lubNonejeśli brak danych/dopasowań. Wyświetla ostrzeżenie w GUI jeśli brak dopasowania lub danych.rysuj_wykres(dane)Rysuje słupkowy wykres średnich cen za pomocą matplotlib.
Tworzy bazę danych SQLite z tabelą oferty (jeśli jeszcze nie istnieje) o strukturze:
id(INTEGER PRIMARY KEY AUTOINCREMENT)tytul(TEXT)cena(INTEGER)url(TEXT UNIQUE)serwis(TEXT)kategoria(TEXT)podkategoria(TEXT)
zapisz_oferte(oferta: dict)- Zapisuje ofertę do bazy danychoferty.db. Jeśli oferta z takim samymurljuż istnieje, aktualizuje jejcena,kategoriaipodkategoria.
Abstrakcyjna klasa bazowa dla scraperów, definiuje metody do pobierania i wyszukiwania danych ze stron.
async szukaj(adres: str) -> List[Dict]— abstrakcyjna metoda do wyszukiwania danych pod wskazanym adresem.async pobierz_strone(sesja, adres: str) -> str— pobiera stronę HTTP, zwraca zawartość strony jako tekst.
Scraper OLX dziedziczący po bazowyScraper, pobiera oferty z kilku stron OLX i zapisuje je do bazy.
async szukaj(adres: str, kategoria: str, podkategoria: str = "")— pobiera i łączy HTML z pierwszych 3 stron wyników, parsuje oferty, wyciąga potrzebne informacje, normalizuje dane i zapisuje oferty do bazy za pomocązapisz_oferte.
Scraper dla Otomoto, dziedziczący po bazowyScraper. Pobiera i parsuje oferty z kilku stron Otomoto, zapisując je do bazy.
async szukaj(adres: str, kategoria: str, podkategoria: str = "")— pobiera i łączy HTML z pierwszych 3 stron wyników, arsuje oferty, wyciąga potrzebne informacje, normalizuje dane i zapisuje oferty do bazy za pomocązapisz_oferte.
- Utwórz środowisko wirtualne:
python -m venv venvsource venv/bin/activate # Linux/macOSvenv\Scripts\activate # Windowspip install -r requirements.txt- Uruchom program:
python .\main.py