Upozornění:
Veškerý zde vystavený kód je mým autorským dílem a je zveřejněn výhradně za účelem ukázky stylu mé práce.
Kód slouží pouze k nahlédnutí – jakékoliv kopírování, šíření, úpravy či jiné využití bez mého výslovného souhlasu nejsou povoleny.
Zůstává mým duševním vlastnictvím ve smyslu autorského zákona.
Děkuji za pochopení.
← Zpět na seznam

Kontrola telefoních čísel (Python)

Úkol zněl jasně: " Mám velikou spoustu čísel v EXCELu a potřebuji je zkontrolovat na bezbečnost".

Když pominu že to nejspíše bude proti licenčnímu ujednání stránek, tak jsem si říkal že pro studium se to nezblázní.

Tady jsem si krapítko pohrál s TKinterem


import pandas as pd
import requests
from bs4 import BeautifulSoup
import re
import time
import tkinter as tk
from tkinter import filedialog, messagebox, scrolledtext

class PhoneLookupApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Vyhledávač telefonních čísel")

        self.open_button = tk.Button(root, text="Otevřít Excel soubor", command=self.open_file)
        self.open_button.pack(pady=10)

        self.text_area = scrolledtext.ScrolledText(root, width=80, height=20)
        self.text_area.pack()

        self.save_button = tk.Button(root, text="Uložit výstup", command=self.save_output, state=tk.DISABLED)
        self.save_button.pack(pady=10)

        self.results = []

    def log(self, message):
        self.text_area.insert(tk.END, message + "\n")
        self.text_area.see(tk.END)
        self.root.update()

    def open_file(self):
        file_path = filedialog.askopenfilename(filetypes=[("Excel Files", "*.xlsx")])
        if not file_path:
            return

        try:
            df = pd.read_excel(file_path)
        except Exception as e:
            messagebox.showerror("Chyba", f"Nelze načíst soubor: {e}")
            return

        if 'cislo' not in df.columns:
            messagebox.showerror("Chyba", "Soubor musí obsahovat sloupec 'cislo'.")
            return

        self.results = []
        self.log("Zpracovávám telefonní čísla...\n")

        for cislo in df['cislo']:
            url = f'https://www.nejakaStrankaNaKontroluCisel.cz/cislo/{cislo}'
            self.log(f"➡ {cislo}")

            try:
                response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
                soup = BeautifulSoup(response.text, 'html.parser')
                text = soup.get_text(separator=' ', strip=True)

                h1 = soup.find('h1')
                nadpis = h1.text.strip() if h1 else ''
                nazev = 'Neznámé číslo' if nadpis.startswith('Telefonní číslo:') else nadpis

                miranez_match = re.search(r'Míra nebezpečnosti:\s*(\d+\s*%)', text)
                miranez = miranez_match.group(1) if miranez_match else 'Nezjištěno'

                hodnoceni_match = re.search(r'Užitečné\s*(\d+)\s+Neutrální\s*(\d+)\s+Obtěžující\s*(\d+)\s+Nebezpečné\s*(\d+)', text)
                if hodnoceni_match:
                    uzit, neut, obtez, nebez = hodnoceni_match.groups()
                    hodnoceni_str = f'Užitečné: {uzit}, Neutrální: {neut}, Obtěžující: {obtez}, Nebezpečné: {nebez}'
                else:
                    hodnoceni_str = 'Bez hodnocení'

                self.results.append({
                    'cislo': cislo,
                    'nazev': nazev,
                    'míra_nebezpečnosti': miranez,
                    'hodnocení_podrobně': hodnoceni_str
                })

            except Exception as e:
                self.results.append({
                    'cislo': cislo,
                    'nazev': 'Chyba',
                    'míra_nebezpečnosti': '',
                    'hodnocení_podrobně': str(e)
                })

            time.sleep(1)

        self.log("\n Hotovo! Teď můžeš výsledek uložit.")
        self.save_button.config(state=tk.NORMAL)

    def save_output(self):
        if not self.results:
            messagebox.showwarning("Pozor", "Nejsou žádná data k uložení.")
            return

        file_path = filedialog.asksaveasfilename(defaultextension=".xlsx", filetypes=[("Excel soubory", "*.xlsx")])
        if not file_path:
            return

        df = pd.DataFrame(self.results)
        try:
            df.to_excel(file_path, index=False)
            self.log(f" Výstup uložen do: {file_path}")
            messagebox.showinfo("Uloženo", "Soubor byl úspěšně uložen.")
        except Exception as e:
            messagebox.showerror("Chyba", f"Nastala chyba při ukládání: {e}")

if __name__ == "__main__":
    root = tk.Tk()
    app = PhoneLookupApp(root)
    root.mainloop()

← Zpět na seznam