# Gerekli kütüphaneleri içe aktarıyoruz. # Bu kütüphaneleri kurmak için: pip install gradio requests beautifulsoup4 import gradio as gr import requests from bs4 import BeautifulSoup # --- Çekirdek Mantık (Önceki Script'ten Uyarlanmış) --- HEADERS = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' } def scrape_wikipedia_article(url: str): """ Kullanıcının girdiği URL'den Wikipedia makalesini çeker ve işler. Bu fonksiyon, Gradio arayüzünün "beyni" olarak çalışacaktır. Args: url (str): Kullanıcının Gradio arayüzünden girdiği Wikipedia URL'si. Returns: tuple: (Başlık, Paragraf Sayısı, Paragrafların Markdown Formatı) veya hata durumunda (Hata Mesajı, 0, "") """ # URL'nin geçerli bir Wikipedia adresi olup olmadığını basitçe kontrol edelim. if not url or "wikipedia.org" not in url: return "Lütfen geçerli bir Wikipedia URL'si girin.", 0, "" try: # --- Veri Çekme (Scraping) --- response = requests.get(url, headers=HEADERS, timeout=10) response.raise_for_status() soup = BeautifulSoup(response.content, "html.parser") # --- Veri Ayrıştırma (Parsing) --- # Sayfa başlığını

etiketinden alalım. page_title_element = soup.find('h1', id='firstHeading') page_title = page_title_element.text if page_title_element else "Başlık Bulunamadı" content_div = soup.find('div', class_='mw-parser-output') if not content_div: return f"'{page_title}' sayfasında ana içerik alanı bulunamadı.", 0, "" paragraphs_html = content_div.find_all('p') # --- Veri Temizleme ve Formatlama --- cleaned_paragraphs = [p.get_text(strip=True) for p in paragraphs_html if len(p.get_text(strip=True)) > 50] paragraph_count = len(cleaned_paragraphs) if paragraph_count == 0: return f"'{page_title}' sayfasında yeterli uzunlukta paragraf bulunamadı.", 0, "" # Çıktıyı daha okunaklı hale getirmek için Markdown formatını kullanalım. # Her paragrafı bir liste elemanı olarak formatlayalım. markdown_output = "\n".join([f"- {p}\n" for p in cleaned_paragraphs]) return page_title, paragraph_count, markdown_output except requests.exceptions.RequestException as e: error_message = f"Ağ hatası: URL'ye ulaşılamadı. Lütfen adresi kontrol edin.\nDetay: {e}" return "Hata", 0, error_message except Exception as e: error_message = f"Beklenmedik bir hata oluştu: {e}" return "Hata", 0, error_message # --- Gradio Arayüzü Tanımlaması --- # Uygulamanın nasıl görüneceğini ve davranacağını tanımlıyoruz. # with gr.Blocks() as iface: daha gelişmiş arayüzler için kullanılır. with gr.Blocks(theme=gr.themes.Soft()) as demo: gr.Markdown( """ # Wikipedia Makale Çekme ve Analiz Aracı Aşağıya bir Wikipedia makalesinin URL'sini yapıştırın ve "Analiz Et" butonuna tıklayarak sayfadaki paragrafları çekin. """ ) # Girdi ve Çıktı Alanları with gr.Row(): # Sol taraf: Girdiler with gr.Column(scale=1): url_input = gr.Textbox( label="Wikipedia URL'si", placeholder="https://tr.wikipedia.org/wiki/Yapay_zeka" ) submit_btn = gr.Button("Analiz Et", variant="primary") # Analiz sonuçları için küçük bilgi kutucukları with gr.Row(): article_title_output = gr.Textbox(label="Makale Başlığı", interactive=False) paragraph_count_output = gr.Number(label="Paragraf Sayısı", interactive=False) # Sağ taraf: Çıktılar with gr.Column(scale=2): main_output = gr.Markdown(label="Çekilen Paragraflar") # Butona tıklandığında ne olacağını belirliyoruz. # fn: Hangi fonksiyon çalışacak? (scrape_wikipedia_article) # inputs: Fonksiyona hangi girdi gidecek? (url_input) # outputs: Fonksiyondan dönen sonuçlar hangi çıktı alanlarına gidecek? submit_btn.click( fn=scrape_wikipedia_article, inputs=url_input, outputs=[article_title_output, paragraph_count_output, main_output] ) # Kullanıcıların denemesi için örnek URL'ler gr.Examples( ["https://tr.wikipedia.org/wiki/Kuantum_bilgisayar%C4%B1", "https://tr.wikipedia.org/wiki/Makine_%C3%B6%C4%9Frenmesi"], inputs=url_input ) # --- Uygulamayı Başlatma --- # Hugging Face Spaces, bu satırı gördüğünde uygulamayı başlatır ve sunar. # Bu satır olmadan, script biter ve "application not initialized" hatası alırsınız. demo.launch()