Finansal Veri Scraping Neden Kritik?
Alpha arayan her quant ekip, aynı temel sorunla karşı karşıya: piyasa verisi parçalanmış halde, farklı kaynaklarda, farklı formatlarda ve farklı erişim kısıtlamalarıyla tutuluyor. Bir earnings call transcript'i Seeking Alpha'da, aynı şirketin 10-K dosyası EDGAR'da, duygu sinyali ise StockTwits'te. Bu verileri tek bir pipeline'da birleştiremeyen ekipler, rakiplerinden saniyeler değil, saatler geride kalır.
Finansal veri scraping, yalnızca veri toplamak değil—doğru zamanda, doğru sırayla, doğrulanabilir şekilde veri toplamaktır. Bu rehber, hangi veriyi nereden, nasıl, hangi proxy katmanıyla ve hangi düzenleyici çerçevede toplayacağınızı anlatıyor.
Hedef Veri Kaynakları ve Zorlukları
Kazanç Çağrısı Transkriptleri
Seeking Alpha, Motley Fool ve TipRanks, earnings call transkriptlerinin en erişilebilir kaynakları. Ancak bu siteler agresif anti-bot korumaları uygular—özellikle aynı IP'den gelen tekrarlı isteklerde. Seeking Alpha, premium içerik için oturum doğrulaması gerektirir; Motley Fool, rate limiting uygular.
Transkript verisinin kritik boyutu zaman damgasıdır. Bir CEO'nun "forward-looking statement" disclaimer'ından sonraki ilk实质性 remark'ı, analist sorusuna verilen ilk yanıt—bunların sırası, sentiment modelinizin doğruluğunu doğrudan etkiler.
Kazanç Takvimleri
Zacks ve Earnings Whispers, hangi şirketin ne zaman raporlayacağını önceden yayınlar. Bu veri, scraping cadence'inizin temel girdisidir: earnings date yaklaştıkça, o şirketin haber ve sosyal medya scraping sıklığını artırırsınız.
Zacks, tablo yapısını sık değiştirir; Earnings Whispers ise Cloudflare altında çalışır. Her iki kaynak da residential proxy olmadan tutarlı şekilde scrapelenemez.
Finansal Haberler
Bloomberg, Reuters ve MarketWatch, fiyat hareketlerini yönlendiren haberlerin birincil kaynakları. Bloomberg ve Reuters, haber metnine erişimi ciddi şekilde kısıtlar; MarketWatch daha açık olsa da, yoğun scraping'i engeller.
Haber scraping'te gecikme (latency) en kritik metriktir. Bir Fed kararının Reuters'da yayınlanmasıyla sizin pipeline'ınıza ulaşması arasındaki süre, trading-adjacent kullanımlarda doğrudan P&L etkisi yaratır.
SEC Dosyaları (EDGAR)
EDGAR, ABD'de kayıtlı şirketlerin mali tablo ve bildirimlerinin resmi deposu. İyi haber: EDGAR kamudur ve bir REST API sunar. Kötü haber: API, saniyede 10 istekle sınırlandırılmıştır ve bu sınır aşıldığında IP bloklanır.
10-K (yıllık), 10-Q (üç aylık), 8-K (özel durum), 13-F (kurumsal sahiplik) formları, her biri farklı scraping stratejisi gerektirir. 13-F verisi özellikle değerlidir—her çeyrekte büyük yatırımcıların portföy değişikliklerini gösterir.
StockTwits ve Finansal Twitter Duygu Analizi
StockTwits, borsa odaklı sosyal medya platformu. Twitter/X ise daha geniş ama $ticker cashtag'leriyle filtrelenmesi gereken bir kaynak. Her iki platform da API erişimini ciddi şekilde kısıtlamıştır.
Duygu verisinin değeri, hızda yatar. Bir hissenin StockTwits'te aniden negatife dönmesi, genellikle fiyat düşüşünden 5-15 dakika önce gerçekleşir. Bu sinyali yakalamak için real-time scraping gerekir—ve real-time scraping, residential rotating proxy olmadan sürdürülemez.
Veri Bütünlüğü: Zaman Damgaları, Sıra Garantisi, Gecikme
Finansal veri scraping'i diğer türlerden ayıran temel fark, veri bütünlüğünün ticari sonuç doğurmasıdır. Bir e-ticaret fiyatı yanlış scrapelenirse, yanlış ürün listesi oluşur. Bir SEC dosyasının zaman damgası yanlışsa, backtest sonuçları geçersiz olur.
Zaman Damgaları
Her kayıt, kaynağın yayınladığı orijinal zaman damgasıyla saklanmalıdır. EDGAR'da bu file_date ve period_of_report alanlarıdır. Haber sitelerinde, yayın zamanı HTML içinde veya JSON-LD structured data'da bulunur. Transkriptlerde, earnings call'ün gerçek tarihi, metnin yayın tarihiyle aynı olmayabilir—her ikisini de saklayın.
Sıra Garantisi
Event-driven sistemlerde, olayların sırası kritiktir. Bir 8-K dosyasının, ilgili haberden önce mi sonra mı geldiğini bilmek, alpha üretip üretmediğinizi belirler. Paralel scraping'te, farklı kaynaklardan gelen verilerin zaman çizelgesini doğru birleştirmek, watermark tabanlı bir event processing mimarisi gerektirir.
Gecikme (Latency)
Trading-adjacent kullanımlarda, gecikme doğrudan maliyettir. Bir haberin kaynağa yayınlanması ile sizin sisteminize ulaşması arasındaki süre:
- Kaynak gecikmesi: Kaynağın kendi CDN cache süresi
- Proxy gecikmesi: Proxy rotasyonu ve yönlendirme süresi
- Parse gecikmesi: HTML'den veri çıkarma süresi
- İnjest gecikmesi: Veritabanına yazma süresi
Residential proxy'ler, datacenter proxy'lere kıyasla ortalama 50-150ms daha yüksek gecikmeye sahiptir. Ancak financial sitelerin datacenter IP'leri bloklama eğilimi göz önüne alındığında, bu gecikme artışı, erişilebilirlik kaybına tercih edilir. ProxyHat'ın lokasyon ağı, kaynak sunucuya coğrafi yakınlık sağlayarak bu gecikmeyi minimize eder.
Neden Residential ve Düşük Gecikmeli Proxy?
Finansal siteler, bot trafiğini tespit etmede en agresif oyunculardır. Sebebi basit: finansal veri, doğrudan parasal değere sahiptir. Bloomberg, Reuters, Seeking Alpha—hepsi gelişmiş parmak izi (fingerprinting) uygular.
| Özellik | Datacenter Proxy | Residential Proxy | Mobile Proxy |
|---|---|---|---|
| Finansal sitelerde engellenme oranı | Yüksek (%60-80) | Düşük (%5-15) | Çok düşük (%1-5) |
| Ortalama gecikme | 50-100ms | 150-300ms | 300-600ms |
| IP güvenilirliği | Düşük (AS tanınabilir) | Yüksek (ISP AS) | Çok yüksek (mobil AS) |
| Maliyet | Düşük | Orta | Yüksek |
| En uygun kullanım | EDGAR (rate-limit içinde) | Haber, transkript, takvim | Sosyal medya, ultra-kısıtlı |
Pratik strateji şudur: EDGAR gibi kamusal API'ler için datacenter proxy yeterlidir (rate limit'e dikkat edildiğinde). Haber siteleri ve transkript kaynakları için residential proxy zorunludur. StockTwits ve benzeri agresif korumalı platformlar için mobile proxy gerekebilir.
Scraping Mimarisi: Kaynak Frekansına Göre Cadence Ayarı
Her veri kaynağı farklı güncelleme sıklığına sahiptir. Aynı cadence ile tüm kaynakları scrapellemek, ya rate-limit aşımına ya da veri kaybına yol açar.
Real-Time Cadence (Haber, Sosyal Medya)
Bloomberg, Reuters, MarketWatch ve StockTwits için sürekli polling gerekir. Ancak sürekli istek, rate-limit'e takılır. Çözüm:
- Haber kaynakları: Her 30-60 saniyede bir ana sayfa/headlines endpoint'ini poll et
- StockTwits: Sembol bazında her 15-30 saniyede bir streaming endpoint'ini kontrol et
- Twitter/X: API rate limit'leri içinde kalmak için sembol listesini önceliklendir
Günlük Cadence (EDGAR, Kazanç Takvimleri)
- EDGAR: Günlük full-text index'i sabah 6:00 ET'de güncellenir. Bu saatten sonra günlük scrape yeterli
- Zacks/Earnings Whispers: Haftalık bazda takvim güncellenir; earnings haftasında günlük kontrol gerekir
Event-Driven Cadence (Earnings Call Transkriptleri)
Kazanç tarihi yaklaştığında, transkript yayınını bekle. Yayından sonraki ilk 2 saat içinde scrape et—bu, sentiment sinyalinin en değerli olduğu dönemdir.
Aşağıdaki Python örneği, ProxyHat residential proxy ile EDGAR 13-F dosyalarını scrapeler:
import requests
from datetime import datetime, timedelta
# ProxyHat residential proxy - US geo-targeting
proxies = {
"http": "http://user-country-US:PASSWORD@gate.proxyhat.com:8080",
"https": "http://user-country-US:PASSWORD@gate.proxyhat.com:8080",
}
# EDGAR full-text search API - 13-F filings from last quarter
base_url = "https://efts.sec.gov/LATEST/search-index"
query_url = (
"https://efts.sec.gov/LATEST/search-index"
f"?q=%22form_type%3A13-F%22"
f"&dateRange=custom&startdt={datetime.now().strftime('%Y-%m-%d')}"
f"&enddt={(datetime.now() + timedelta(days=1)).strftime('%Y-%m-%d')}"
)
headers = {
"User-Agent": "YourOrg research@yourorg.com",
"Accept": "application/json",
}
resp = requests.get(query_url, headers=headers, proxies=proxies, timeout=30)
filings = resp.json()
for filing in filings.get("hits", {}).get("hits", []):
source = filing["_source"]
print(
f"13-F: {source.get('entity_name')} "
f"Filed: {source.get('file_date')} "
f"Period: {source.get('period_of_report')}"
)
EDGAR'ın 10 istek/saniye sınırına dikkat—datacenter proxy ile bile bu sınırı aşmamak gerekir. ProxyHat ile sticky session kullanarak, tek bir IP üzerinden sınırlı ama tutarlı istek gönderirsiniz.
Earnings Takvimi Scraping Örneği
Aşağıdaki örnekte, ProxyHat ile geo-targeted residential proxy üzerinden earnings takvim verisi çekiyoruz:
import requests
from bs4 import BeautifulSoup
# ProxyHat residential proxy - US geo-targeting for US financial sites
proxy_url = "http://user-country-US:PASSWORD@gate.proxyhat.com:8080"
proxies = {"http": proxy_url, "https": proxy_url}
headers = {
"User-Agent": (
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/125.0.0.0 Safari/537.36"
),
"Accept-Language": "en-US,en;q=0.9",
}
def scrape_earnings_calendar(date_str: str) -> list[dict]:
"""Scrape earnings calendar for a specific date."""
url = f"https://www.example-earnings-site.com/earnings-calendar/{date_str}"
resp = requests.get(url, headers=headers, proxies=proxies, timeout=30)
soup = BeautifulSoup(resp.text, "html.parser")
earnings = []
rows = soup.select("table.earnings-table tbody tr")
for row in rows:
cells = row.find_all("td")
earnings.append({
"ticker": cells[0].text.strip(),
"company": cells[1].text.strip(),
"eps_estimate": cells[2].text.strip(),
"report_time": cells[3].text.strip(), # BMO / AMC
"scraped_at": datetime.utcnow().isoformat(), # Zaman damgası kritik
})
return earnings
# Kullanım
today = datetime.now().strftime("%Y-%m-%d")
calendar = scrape_earnings_calendar(today)
print(f"{len(calendar)} earnings events found for {today}")
Haber Scraping: curl ile ProxyHat
Haber siteleri, hızlı doğrulama için curl ile test edilebilir. Aşağıdaki örnek, MarketWatch haber başlıklarını çeker:
# ProxyHat residential proxy ile MarketWatch haber başlıkları
curl -x "http://user-country-US:PASSWORD@gate.proxyhat.com:8080" \
-H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" \
-H "Accept: text/html,application/xhtml+xml" \
-H "Accept-Language: en-US,en;q=0.9" \
-s "https://www.marketwatch.com/latest-news" \
| python3 -c "
import sys, json
from html.parser import HTMLParser
class HeadlineParser(HTMLParser):
def __init__(self):
super().__init__()
self.headlines = []
self.in_headline = False
def handle_starttag(self, tag, attrs):
attrs_dict = dict(attrs)
if tag == 'h3' and 'article__headline' in attrs_dict.get('class', ''):
self.in_headline = True
def handle_data(self, data):
if self.in_headline:
self.headlines.append(data.strip())
self.in_headline = False
parser = HeadlineParser()
parser.feed(sys.stdin.read())
for h in parser.headlines[:10]:
print(h)
"
StockTwits Duygu Verisi: Node.js ile Streaming
const axios = require('axios');
const { HttpsProxyAgent } = require('https-proxy-agent');
// ProxyHat residential proxy
const agent = new HttpsProxyAgent('http://user-country-US:PASSWORD@gate.proxyhat.com:8080');
async function fetchStockTwitsSentiment(symbol) {
const url = `https://api.stocktwits.com/api/2/streams/symbol/${symbol}.json`;
try {
const response = await axios.get(url, {
httpsAgent: agent,
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Accept': 'application/json',
},
timeout: 15000,
});
const messages = response.data.messages || [];
const sentimentData = messages.map((msg) => ({
id: msg.id,
symbol: symbol,
body: msg.body,
sentiment: msg.entities?.sentiment?.basic || 'neutral',
timestamp: msg.created_at,
username: msg.user?.username,
}));
// Zaman damgası ile sıralama - veri bütünlüğü kritik
sentimentData.sort(
(a, b) => new Date(a.timestamp) - new Date(b.timestamp)
);
console.log(`${symbol}: ${sentimentData.length} messages processed`);
return sentimentData;
} catch (error) {
console.error(`Error fetching ${symbol}:`, error.message);
return [];
}
}
// Sembol listesini sırayla işle - rate limit'e takılmamak için
const symbols = ['AAPL', 'TSLA', 'NVDA', 'MSFT', 'AMZN'];
(async () => {
for (const sym of symbols) {
await fetchStockTwitsSentiment(sym);
await new Promise(r => setTimeout(r, 2000)); // 2s bekleme
}
})();
Düzenleyici Farkındalık: SEC, MiFID II ve Veri Lisanslama
Finansal veri scraping, teknik zorlukların ötesinde düzenleyici riskler taşır. Bu riskleri anlamak, her fintech veri ekibinin görevidir.
SEC ve EDGAR Kullanım Koşulları
EDGAR kamusal bir veritabanıdır ve 10 istek/saniye sınırı dışında scraping'i açıkça yasaklamaz. Ancak:
- EDGAR'dan elde edilen veriyi ticari ürün olarak yeniden satmak, SEC'in fair use politikasıyla çelişebilir
- Şirketlerin kendilerinin yayımladığı veri (finansal tablolar) genellikle telifsizdir, ancak sunum formatı teliflenebilir
- EDGAR'ın API'sini kullanırken doğru User-Agent bildirmek zorunludur
MiFID II ve Avrupa Veri Kısıtlamaları
Avrupa'da faaliyet gösteren ekipler için MiFID II, piyasa verisinin toplanması ve dağıtımı üzerinde katı kurallar uygular:
- Pre-trade veri (fiyat teklifleri) için borsalardan lisans gerekebilir
- Post-trade veri (işlem sonuçları) belirli koşullarda kamuya açık olabilir
- Veriyi yeniden dağıtım (redistribution) amacıyla topluyorsanız, borsa lisans ücretleri ödemeniz gerekir—bu, scraping ile aşılamaz
Market-Data-License Hususları
Borsa verisi (NYSE, NASDAQ, LSE vb.) toplamak ile dağıtmak farklı şeylerdir:
- İç kullanım (alpha araştırması, risk modelleme): Genellikle scraping ile sorun yok
- Yeniden dağıtım (SaaS ürününde müşterilere sunma): Borsa lisans ücretleri yıllık on binlerce dolar olabilir
- Gecikmeli veri (15-20 dakika): Gerçek zamanlı veri lisansından daha ucuz veya ücretsiz olabilir
Kural: Scraping ile topladığınız veriyi üçüncü tarafa satıyorsanız veya kamuya açıyorsanız, kaynağın lisans koşullarını mutlaka inceleyin. İç araştırma kullanımı bile bazı kaynakların ToS'unu ihlal edebilir—özellikle Bloomberg ve Reuters gibi premium kaynaklar.
Kullanım Senaryoları
Alpha Araştırması
Earnings call transkriptlerindeki dil sinyalleri, yönetim rehberliğindeki ton değişimleri, analist sorularındaki örüntüler—bunlar quant modellerinin en değerli girdileridir. Bu verileri zamanında ve eksiksiz toplamak, alpha üretmenin ön koşuludur.
Tipik bir alpha pipeline'ı:
- EDGAR'dan 10-K/10-Q dosyalarını günlük çek
- Earnings takvimini takip et, transkript yayınını bekle
- Transkript yayınlandıktan 30 dakika içinde NLP pipeline'ına gönder
- Sentiment skorunu fiyat verisiyle birleştir
- Model sinyalini portföy optimizasyonuna aktar
Risk İzleme
Finansal haberler ve sosyal medya duygu verisi, risk ekiplerinin en erken uyarı sistemleridir. Bir şirketin anlık negatif duygu patlaması, temel risk faktörünün göstergesi olabilir.
Risk monitoring için:
- Portföydeki her pozisyon için sembol bazlı haber ve sosyal medya akışı kur
- Anormal duygu değişimlerinde (3 sigma+) otomatik uyarı tetikle
- 8-K dosyalarını real-time izle—özellikle "Material Event" kategorisini
Düzenleyici Uyumluluk Akışları
Bazı kurumlar, düzenleyici raporlama için veri toplamak zorundadır. MiFID II'nin best execution gereksinimleri, işlemlerin piyasa koşullarıyla karşılaştırılmasını zorunlu kılar. Bu karşılaştırma için piyasa verisi toplamak, scraping'in meşru bir kullanım alanıdır.
Proxy Seçimi ve Yapılandırma Stratejileri
Farklı veri kaynakları, farklı proxy stratejileri gerektirir. ProxyHat'ın esnek planları, bu çeşitliliği destekler:
Sticky Session vs. Per-Request Rotasyon
- Per-request rotasyon: Haber siteleri ve genel scraping için. Her istek yeni IP—fingerprint takibi zorlaşır
- Sticky session: Oturum gerektiren siteler (Seeking Alpha, premium içerik) için. Aynı IP üzerinden oturum sürdürülür
ProxyHat'ta sticky session kullanmak için username'e session flag ekleyin:
# Sticky session - 10 dakika aynı IP
http://user-session-abc123-country-US:PASSWORD@gate.proxyhat.com:8080
# Per-request rotasyon (varsayılan)
http://user-country-US:PASSWORD@gate.proxyhat.com:8080
Geo-Targeting
Birçok finansal site, ABD dışı IP'lerden erişimi kısıtlar veya farklı içerik sunar. ProxyHat'ın lokasyon ağı, 190+ ülkede residential IP sunarak bu kısıtlamayı aşar:
- ABD finansal siteleri için:
country-US - Avrupa borsa verisi için:
country-DE,country-GB,country-FR - Asya piyasaları için:
country-JP,country-KR,country-HK
Temel Çıkarımlar
- Veri bütünlüğü ticari sonuç doğurur: Zaman damgaları, sıra garantisi ve gecikme—her biri ölçülmeli ve optimize edilmeli
- Kaynak bazlı scraping cadence ayarlayın: Haberler real-time, EDGAR günlük, transkriptler event-driven
- Residential proxy finansal sitelerde zorunludur: Datacenter IP'ler Bloomberg, Reuters ve Seeking Alpha tarafından hızla engellenir
- Düzenleyici riskleri anlamak teknik beceriler kadar önemlidir: İç kullanım ile yeniden dağıtım arasındaki fark, lisans yükümlülüklerini belirler
- Proxy seçimini veri kaynağına göre yapın: EDGAR için datacenter, haber için residential, sosyal medya için mobile proxy
- EDGAR'ın rate limit'ine saygı gösterin: 10 istek/saniye sınırı, proxy ile aşılamaz—sisteminizi buna göre tasarlayın
Finansal veri scraping, doğru araçlar ve mimari ile güçlü bir alpha kaynağıdır. Yanlış araçlarla ise engellenmiş IP'ler ve güvenilmez veriden ibarettir. Web scraping kullanım senaryolarımızı inceleyerek ProxyHat'ın finansal veri toplamada nasıl yardımcı olduğunu detaylı öğrenin.






