requests ve BeautifulSoup ile Haber Başlığı Toplayıcı
Bu projede bir haber sitesinden başlıkları çekerek listeleyecek bir Python programı yazacağız. İki kütüphane kullanacağız: requests web sayfasını indirmek için, BeautifulSoup ise HTML'den veri çıkarmak için.
İlk olarak gerekli kütüphaneleri yükle:
1pip install requests beautifulsoup4Şimdi adım adım ilerleyelim.
Adım 1: Sayfayı İndir
requests kütüphanesi ile bir web sayfasına istek göndeririz. Örneğin BBC News'in ana sayfasını alalım:
1import requests2from bs4 import BeautifulSoup34url = 'https://www.bbc.com/news'5response = requests.get(url)6print(response.status_code) # 200 ise başarılıAdım 2: HTML'i Ayrıştır
İndirilen HTML içeriğini BeautifulSoup ile işleyelim:
1soup = BeautifulSoup(response.content, 'html.parser')Adım 3: Başlıkları Bul ve Çıkar
Haber başlıkları genellikle belirli etiketlerde saklanır. Tarayıcının geliştirici araçlarıyla (F12) hangi etiketin kullanıldığını kontrol et. BBC News örneğinde h2 ve h3 etiketleri kullanılır:
1basliklar = []23# h2 ve h3 etiketlerini ara4for baslik in soup.find_all(['h2', 'h3']):5metin = baslik.get_text(strip=True)6if metin and len(metin) > 5: # Boş veya çok kısa başlıkları filtrele7basliklar.append(metin)89# İlk 10 başlığı yazdır10for i, baslik in enumerate(basliklar[:10], 1):11print(f"{i}. {baslik}")Tam Proje Kodu
Tüm işlemi bir dosyada birleştirelim:
1import requests2from bs4 import BeautifulSoup3import time4from datetime import datetime56def haberler_cek(url):7try:8response = requests.get(url, timeout=5)9response.raise_for_status()1011soup = BeautifulSoup(response.content, 'html.parser')12basliklar = []1314for baslik in soup.find_all(['h2', 'h3', 'h1']):15metin = baslik.get_text(strip=True)16if metin and len(metin) > 10:17basliklar.append(metin)1819return basliklar[:15]2021except requests.exceptions.RequestException as e:22print(f"Hata: {e}")23return []2425# Çalıştır26url = 'https://www.bbc.com/news'27basliklar = haberler_cek(url)2829print(f"\n{datetime.now().strftime('%d.%m.%Y %H:%M')} - BBC News Başlıkları\n")30for i, baslik in enumerate(basliklar, 1):31print(f"{i}. {baslik}")3233# Dosyaya kaydet34with open('haberler.txt', 'w', encoding='utf-8') as f:35f.write(f"Tarih: {datetime.now()}\n\n")36for baslik in basliklar:37f.write(f"- {baslik}\n")3839print("\nHaberler haberler.txt dosyasına kaydedildi.")Çıktı Örneği:
125.01.2025 14:32 - BBC News Başlıkları231. Ukraine war: Russia launches major assault42. Gaza ceasefire talks continue53. Tech stocks surge on AI optimism...67Haberler haberler.txt dosyasına kaydedildi.İpuçları:
Farklı siteler farklı HTML yapılarına sahiptir. Hangi etiketlerin başlık içerdiğini anlamak için tarayıcıda sağ tıkla "Öğeyi İncele" yap. User-Agent ekleyerek bazı sitelerden daha kolay veri çekebilirsin: headers = {'User-Agent': 'Mozilla/5.0'} sonra requests.get(url, headers=headers) kullan.
0 yorum