Python Deprem Takip Botu Yapmak (AFAD Verileriyle)

kusha · 03 Ağustos 2026 · 6 dk okuma

AFAD'ın (Afet ve Acil Durum Yönetimi Başkanlığı) web sitesinde son depremleri gösteren bir tablo bulunur. Bu derste bu tabloyu düzenli aralıklarla okuyup, yalnızca yeni depremleri (ve isterseniz belirli bir büyüklüğün üzerindekileri) bildiren bir bot yazacağız.

Tabloyu Bulmak ve Satırlarını Almak

import requests
from bs4 import BeautifulSoup

sayfa = requests.get("https://deprem.afad.gov.tr/last-earthquakes.html")
html = BeautifulSoup(sayfa.content, "html.parser")

tablo = html.find("table")
satirlar = tablo.find_all("tr")[1:11]  # son 10 deprem (başlık satırını atla)

find_all("tr"), tablodaki tüm satırları (<tr> etiketlerini) bir liste olarak döndürür. [1:11], ilk satırı (genelde başlık satırıdır) atlayıp sonraki 10 satırı alır.

Her Satırdan Veriyi Çekmek

for satir in satirlar:
    kolonlar = satir.find_all("td")
    tarih = kolonlar[0].get_text()
    buyukluk = kolonlar[5].get_text()
    yer = kolonlar[6].get_text()
    print(f"{tarih} - {yer} - Büyüklük: {buyukluk}")

Her satırdaki hücre (<td>) sayısı ve sırası, kaynak sitenin tablo yapısına göre değişir — hangi indeksin hangi bilgiyi taşıdığını tarayıcının İncele aracıyla kontrol ederek belirlemeniz gerekir.

Aynı Depremi Tekrar Tekrar Bildirmemek

Bot her birkaç saniyede bir tabloyu yeniden okuduğu için, aynı deprem birden fazla kez görünür ve tekrar tekrar bildirim gönderebilir. Bunu önlemek için, daha önce bildirdiğiniz depremlerin bir kimliğini (ör. tarih+yer birleşimini) bir kümede (set) tutabilirsiniz:

bildirilenler = set()

def kontrol_et():
    for satir in satirlar:
        kolonlar = satir.find_all("td")
        deprem_id = kolonlar[0].get_text() + kolonlar[6].get_text()

        if deprem_id in bildirilenler:
            continue

        bildirilenler.add(deprem_id)
        mesaj_gonder(f"Yeni deprem: {kolonlar[6].get_text()}")

continue, döngüde o an işlenen elemanı atlayıp bir sonrakine geçer — burada daha önce görülmüş bir depremi tekrar bildirmeden atlamak için kullanılır.

Büyüklüğe Göre Filtrelemek

Küçük depremlerin çok sık olması nedeniyle, yalnızca belirli bir büyüklüğün üzerindekileri bildirmek isteyebilirsiniz:

BUYUKLUK_ESIGI = 4.0

buyukluk_degeri = float(kolonlar[5].get_text())
if buyukluk_degeri >= BUYUKLUK_ESIGI:
    mesaj_gonder(f"Büyük deprem: {kolonlar[6].get_text()} - {buyukluk_degeri}")

Sırada Ne Var?

Sırada, aynı "yeni veri geldiğinde bildir" mantığını bir haber sitesinin RSS akışı üzerinde uygulayacağız.