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í.


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