MuratKomurcu commited on
Commit
26b5454
·
verified ·
1 Parent(s): 9152f2f

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +103 -0
app.py ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ from bs4 import BeautifulSoup
3
+ import time
4
+
5
+ # --- Konfigürasyon ---
6
+ # Hedef Wikipedia sayfası
7
+ URL = "https://tr.wikipedia.org/wiki/B%C3%BCy%C3%BCk_dil_modeli"
8
+
9
+ # Wikipedia gibi siteler, bir tarayıcıdan gelmeyen (User-Agent'ı olmayan)
10
+ # istekleri engelleyebilir. Profesyonel bir yaklaşım, isteğimize bir
11
+ # User-Agent başlığı eklemektir. Bu, isteğimizin standart bir web tarayıcısından
12
+ # geldiğini simüle eder.
13
+ HEADERS = {
14
+ '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'
15
+ }
16
+
17
+ # Çıktı dosyasının adı
18
+ OUTPUT_FILENAME = "buyuk_dil_modeli.txt"
19
+
20
+ # --- Ana Script Mantığı ---
21
+ def scrape_wikipedia_article(url, headers):
22
+ """
23
+ Verilen Wikipedia URL'sinden ana metin içeriğini çeker.
24
+
25
+ Args:
26
+ url (str): Hedef Wikipedia makalesinin URL'si.
27
+ headers (dict): HTTP isteği için gönderilecek başlıklar.
28
+
29
+ Returns:
30
+ str: Çekilen tüm paragrafların birleştirilmiş hali veya hata durumunda None.
31
+ """
32
+ print(f"'{url}' adresine istek gönderiliyor...")
33
+ try:
34
+ # Belirtilen başlıklarla birlikte GET isteği gönderiyoruz.
35
+ # timeout=10, isteğin 10 saniyeden uzun sürmesi durumunda hata vermesini sağlar.
36
+ response = requests.get(url, headers=headers, timeout=10)
37
+
38
+ # response.raise_for_status(), 200 (OK) dışında bir HTTP durum kodu
39
+ # (örn: 404 Not Found, 500 Server Error) gelirse bir hata fırlatır.
40
+ response.raise_for_status()
41
+ print("Sayfa başarıyla indirildi. İçerik ayrıştırılıyor...")
42
+
43
+ # Gelen HTML içeriğini BeautifulSoup ile ayrıştırılabilir bir objeye dönüştürüyoruz.
44
+ soup = BeautifulSoup(response.content, "html.parser")
45
+
46
+ # Adım 3'te keşfettiğimiz deseni burada kullanıyoruz:
47
+ # Sayfanın ana içeriğini barındıran div'i bul.
48
+ content_div = soup.find('div', class_='mw-parser-output')
49
+
50
+ # Eğer bu div bulunamazsa, sitenin yapısı değişmiş olabilir.
51
+ # Bu tür kontroller, kodumuzu daha sağlam (robust) yapar.
52
+ if not content_div:
53
+ print("Hata: Ana içerik alanı ('div' with class 'mw-parser-output') bulunamadı.")
54
+ print("Sitenin HTML yapısı değişmiş olabilir.")
55
+ return None
56
+
57
+ # Ana içerik div'i içindeki TÜM paragraf (<p>) etiketlerini bul.
58
+ paragraphs = content_div.find_all('p')
59
+
60
+ # Her bir paragraf etiketinin içindeki metni alıp bir listeye ekliyoruz.
61
+ # .get_text(strip=True) metodu, metnin başındaki ve sonundaki boşlukları temizler.
62
+ all_text = [p.get_text(strip=True) for p in paragraphs]
63
+
64
+ # Sadece boş metin içeren veya çok kısa olan paragrafları filtreleyebiliriz.
65
+ # Bu, veri temizleme (data cleaning) adımının bir parçasıdır.
66
+ cleaned_text = [text for text in all_text if len(text) > 20] # 20 karakterden uzun paragrafları al
67
+
68
+ print(f"Toplam {len(paragraphs)} paragraf bulundu, {len(cleaned_text)} tanesi işleme alındı.")
69
+
70
+ # Tüm paragrafları aralarına iki satır boşluk koyarak birleştiriyoruz.
71
+ return "\n\n".join(cleaned_text)
72
+
73
+ except requests.exceptions.RequestException as e:
74
+ print(f"Bir ağ hatası oluştu: {e}")
75
+ return None
76
+
77
+ def save_to_file(content, filename):
78
+ """
79
+ Verilen içeriği belirtilen dosyaya kaydeder.
80
+
81
+ Args:
82
+ content (str): Dosyaya yazılacak metin içeriği.
83
+ filename (str): Çıktı dosyasının adı.
84
+ """
85
+ try:
86
+ with open(filename, 'w', encoding='utf-8') as f:
87
+ f.write(content)
88
+ print(f"İçerik başarıyla '{filename}' dosyasına kaydedildi.")
89
+ except IOError as e:
90
+ print(f"Dosyaya yazma sırasında bir hata oluştu: {e}")
91
+
92
+
93
+ # --- Programın Başlangıç Noktası ---
94
+ if __name__ == "__main__":
95
+ article_content = scrape_wikipedia_article(URL, HEADERS)
96
+
97
+ # scrape_wikipedia_article fonksiyonu bir içerik döndürdüyse (None değilse)
98
+ # bu içeriği dosyaya kaydet.
99
+ if article_content:
100
+ save_to_file(article_content, OUTPUT_FILENAME)
101
+ else:
102
+ print("İşlem başarısız oldu. Hiçbir içerik kaydedilmedi.")
103
+