Python kullanarak Finans Verilerini Kazımayı Öğrenin
Yayınlanan: 2019-04-26Borsa, her saniye güncellenen milyonlarca giriş içeren devasa bir veri tabanıdır. Şirketlerin finansal verilerini sağlayan birçok şirket olsa da, bu genellikle bir API (Uygulama programlama arayüzü) aracılığıyla olur. Ve tahmin edebileceğiniz gibi, bu API'ler asla ücretsiz değildir. Yahoo Finance, güvenilir bir borsa verileri kaynağıdır ve ücretli bir API'ye sahiptir. Python kullanarak Yahoo Finance verilerini nasıl kazıyacağınız konusunda adım adım bir süreçte size rehberlik edeceğiz.
Neden Yahoo Finance'ten Verileri Taramalısınız?
Güvenilir bir kaynaktan ücretsiz, temiz finans verilerine ihtiyacınız varsa, Yahoo Finance en iyi seçeneğinizdir. Şirket profili web sayfaları, web kazıma python'u kolaylaştıran tek tip bir yapıda oluşturulmuştur. Microsoft'un finans sayfasındaki verileri taramak için bir komut dosyası yazarsanız, aynı komut dosyası Apple'ın finans sayfasındaki verileri taramak için de kullanılabilir.
Python kullanarak Finans Verilerini Web'de Nasıl Kazıyabilirsiniz?
Kurulum ve başlangıç için, önde gelen bir otel rezervasyon portalından verilerin nasıl taranacağını tartıştığımız veri kazıma python hakkındaki bu makaledeki temel adımlara başvurabilirsiniz. Atom kod düzenleyicisi ile birlikte tüm bağımlılıkları yükledikten sonra, Python ile Yahoo Finance'i kazımaya başlayalım.
1. Python ile Kazıma Koduyla Başlayın
Kurulum ve kurulum aşamaları tamamlandıktan sonra, doğrudan koda gidebilir ve Yahoo Finance Scraping'i başlatabiliriz. Kod aşağıda daha ayrıntılı olarak verilmiştir ve yalnızca Python komutu kullanılarak çalıştırılabilir.

Kodu yukarıda gösterilen şekilde çalıştırabilirsiniz. İstendiğinde, finansal özetini kontrol etmek istediğiniz şirketin URL'sini girmeniz yeterlidir. Bağlantıyı Microsoft için kullandık.
[kod dili=”python”]
#!/usr/bin/python
# -*- kodlama: utf-8 -*-
urllib.request'i içe aktar
urllib.parse'ı içe aktar
urllib.error'ı içe aktar
bs4'ten BeautifulSoup'u içe aktarın
ssl'yi içe aktar
json'u içe aktar
ithalat ast
işletim sistemini içe aktar
urllib.request'ten içe aktarma İsteği, urlopen
# SSL sertifika hatalarını yok saymak için
ctx = ssl.create_default_context()
ctx.check_hostname = Yanlış
ctx.verify_mode = ssl.CERT_NONE
# Kullanıcıdan giriş
url = input('Yahoo Finans Şirketi URL'sini Girin-')
# Web sitesini, bir Mozilla tarayıcısı kullanarak siteye eriştiğinize inandırmak
req = İstek(url, başlıklar={'User-Agent': 'Mozilla/5.0'})
web sayfası = urlopen(req).read()
# Verilerin kolayca çıkarılması için HTML sayfasının bir BeautifulSoup nesnesi oluşturma.
çorba = BeautifulSoup(web sayfası, 'html.parser')
html = çorba.prettify('utf-8')
company_json = {}
other_details = {}
çorbadaki yayılma için.findAll('span',
attrs={'class': 'Trsdu(0.3s) Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(b)'
}):
company_json['PRESENT_VALUE'] = span.text.strip()
div için çorba.findAll('div', attrs={'class': 'D(ib) Va(t)'}):
div.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
company_json['PRESENT_GROWTH'] = span.text.strip()
td için çorba.findAll('td', attrs={'data-test': 'PREV_CLOSE-value'}):
td.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
other_details['PREV_CLOSE'] = span.text.strip()
td için çorba.findAll('td', attrs={'data-test': 'OPEN-value'}):
td.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
other_details['OPEN'] = span.text.strip()
td için çorba.findAll('td', attrs={'data-test': 'BID-value'}):
td.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
other_details['BID'] = span.text.strip()
td için çorba.findAll('td', attrs={'data-test': 'ASK-value'}):
td.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
other_details['ASK'] = span.text.strip()
td için çorba.findAll('td', attrs={'data-test': 'DAYS_RANGE-value'}):
td.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
other_details['DAYS_RANGE'] = span.text.strip()
çorbadaki td için.findAll('td',
attrs={'veri testi': 'FIFTY_TWO_WK_RANGE-değeri'}):
td.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
other_details['FIFTY_TWO_WK_RANGE'] = span.text.strip()
td için çorba.findAll('td', attrs={'data-test': 'TD_VOLUME-value'}):
td.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
other_details['TD_VOLUME'] = span.text.strip()
çorbadaki td için.findAll('td',
attrs={'veri testi': 'AVERAGE_VOLUME_3MONTH-değeri'
}):
td.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
other_details['AVERAGE_VOLUME_3MONTH'] = span.text.strip()
td için çorba.findAll('td', attrs={'data-test': 'MARKET_CAP-value'}):
td.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
other_details['MARKET_CAP'] = span.text.strip()
td için çorba.findAll('td', attrs={'data-test': 'BETA_3Y-value'}):
td.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
other_details['BETA_3Y'] = span.text.strip()
td için çorba.findAll('td', attrs={'data-test': 'PE_RATIO-value'}):
td.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
other_details['PE_RATIO'] = span.text.strip()
td için çorba.findAll('td', attrs={'data-test': 'EPS_RATIO-value'}):
td.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
other_details['EPS_RATIO'] = span.text.strip()
td için çorba.findAll('td', attrs={'data-test': 'KAZANÇ_TARİH-değeri'
}):
other_details['EARNINGS_DATE'] = []
td.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
other_details['EARNINGS_DATE'].append(span.text.strip())
çorbadaki td için.findAll('td',
attrs={'veri testi': 'BÖLÜEND_AND_YIELD-değeri'}):
other_details['DIVIDEND_AND_YIELD'] = td.text.strip()
çorbadaki td için.findAll('td',
attrs={'veri testi': 'EX_DIVIDEND_DATE-değeri'}):
td.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
other_details['EX_DIVIDEND_DATE'] = span.text.strip()
çorbadaki td için.findAll('td',
attrs={'veri testi': 'ONE_YEAR_TARGET_PRICE değeri'
}):
td.findAll('span', özyinelemeli=Yanlış) içindeki yayılma için:
other_details['ONE_YEAR_TARGET_PRICE'] = span.text.strip()
company_json['OTHER_DETAILS'] = other_details
outfile olarak open('data.json', 'w') ile:
json.dump(şirket_json, dış dosya, girinti=4)
yazdır company_json
dosya olarak open('output_file.html', 'wb') ile:
dosya.write(html)
print '———-Verilerin çıkarılması tamamlandı. json dosyasını kontrol edin.———-'

[/kod]
Kodu çalıştırıp bir şirket URL'si girdiğinizde, terminalinizde bir json yazdırıldığını göreceksiniz. Bu json, klasörünüzdeki “data.json” adlı bir dosyaya da kaydedilecektir. Microsoft için aşağıdaki JSON'u elde ettik.
[kod dili=”python”]
{
“MEVCUT_BÜYÜME”: “+1,31 (+0,67)”,
"BUGÜN_DEĞER": "197.00",
“PREV_CLOSE”: “195.69”,
“AÇIK”: “196.45”,
"TEKLİF": "196,89 x 900",
“SOR”: “197.00 x 1400”,
"TD_VOLUME": "18,526,644",
“ORTALAMA_HACİM_3AY”: “29.962.082”,
"MARKET_CAP": "928.91B",
"BETA_3Y": "0.91",
“PE_RATIO”: “16.25”,
“EPS_RATIO”: “12.12”,
"KAZANÇ_TARİH": [
“30 Nisan 2019”
],
“BÖLÜMEND_AND_VERİM”: “2,92 (%1,50)”,
"EX_DIVIDEND_DATE": "2019-02-08",
“ONE_YEAR_TARGET_PRICE”: “190,94”
}
[/kod]
Son zamanlarda birden fazla kayıp yaşayan Apple için JSON böyle görünüyordu.
[kod dili=”python”]
{
"BUGÜN_DEĞER": "198.87",
“MEVCUT_BÜYÜME”: “-0.08 (-0.04%)”,
"DİĞER DETAYLAR": {
"ÖNCEKİ_KAPALI": "198,95",
“AÇIK”: “199.20”,
"TEKLİF": "198,91 x 800",
“SOR”: “198.99 x 1000”,
"TD_VOLUME": "27.760.668",
“ORTALAMA_HACİM_3 AY”: “28.641.896”,
"MARKET_CAP": "937.728B",
"BETA_3Y": "0.91",
“PE_RATIO”: “16.41”,
“EPS_RATIO”: “12.12”,
"KAZANÇ_TARİH": [
“30 Nisan 2019”
],
“BÖLÜMEND_AND_VERİM”: “2,92 (%1,50)”,
"EX_DIVIDEND_DATE": "2019-02-08",
“ONE_YEAR_TARGET_PRICE”: “193.12”
}
}
[/kod]
Aynı şeyi istediğiniz sayıda şirketle ve güncel kalmak istediğiniz sıklıkta yapabilirsiniz.
2. Tarayıcı Kodunun Açıklaması
Önceki web kazıma kodları gibi, bunda da ilk önce HTML dosyasının tamamını elde ettik. Bundan sonra, ihtiyacımız olan verilere sahip olan belirli etiketleri (belirli sınıflarla) belirledik. Bu adım, tek bir şirket ayrıntıları sayfası için manuel olarak yapıldı. Belirli etiketler ve ilgili sınıfları tanımlandıktan sonra, kodumuzu kullanarak bu etiketleri çıkarmak için güzel çorba kullandık.
Ardından bu etiketlerin her birinden gerekli verileri company_json adlı bir değişkene kopyaladık. Bu, sonunda data.json adlı bir JSON tipi dosyaya yazdığımız json'dur. Ayrıca, kazınmış HTML'yi yerel belleğinizde output_file.html adlı bir dosyaya kaydettiğimizi görebilirsiniz. Bu, HTML sayfasını kendiniz analiz edebilmeniz ve daha fazla veri taramak için diğer veri kazıma python tekniklerini bulabilmeniz için yapılır.
3. Yakaladığımız Bazı Önemli Veri Noktaları
- PREV_CLOSE: Bir hisse senedinin işlem gördüğü önceki günkü kapanış fiyatını ifade eder. Bir hisse senedinin önceki günün değeri, yalnızca borsanın açık olduğu bir gündeki (tatil günleri değil) son kapanış fiyatına atıfta bulunur.
- AÇIK: Kısaca Açık olarak da adlandırılan açılış fiyatı, bir hisse senedinin işlem gününde başlangıç fiyatıdır. Örneğin, New York Menkul Kıymetler Borsası'ndaki (NYSE) herhangi bir borsanın açılış fiyatı, Doğu saatiyle 9:30'daki fiyatı olacaktır.
- BID & ASK: Her iki fiyat da hisse senedinin tek bir hissesine ilişkin tekliflerdir. Teklif, alıcıların bunun için ödemeye istekli olduğu fiyatı ifade ederken, talep, satıcıların onu satmak için istekli olduğu fiyattır. Çarpan, ilgili fiyatlarında alım satım bekleyen hisse sayısını ifade eder.
- TD_VOLUME: Gün içinde el değiştiren hisse sayısıdır.
- PE_RATIO: Yatırımcıların muhtemelen baktığı en önemli tek faktör, bir şirketin hisse senedinin cari piyasa fiyatının, şirketin hisse başına kazancına bölünmesiyle hesaplanır. Basitçe söylemek gerekirse, şirketin kazancının her bir rupi değerindeki ödemeye hazır olan paranın toplamıdır.
Bazı önemli veri noktalarını açıklamamızın nedeni, sadece Yahoo Finans sayfasından veri sıyırarak bir şirketin finansallarına ne kadar derinlemesine dalabileceğinizi bilmenizi istedik.
Yahoo Finance'ten Hangi Verileri Taratabilirsiniz?
Bu Python kazıyıcıyı kullanarak farklı veri noktalarını tarayabileceksiniz. Mevcut değer ve mevcut büyüme veya düşüş yüzdesi son derece önemlidir. Diğer veri noktaları birlikte görüntülendiğinde daha iyi bir resim sunar ve bir şirketin hissesine yatırım yapmanın iyi bir fikir olup olmayacağına karar vermede yardımcı olur. Yine de verilerin anlık görüntüsüne bakmak çok etkili olmayabilir. Verileri düzenli aralıklarla kazımak ve gelecekteki hisse senedi fiyatlarını tahmin etmek için büyük bir veri seti kullanmak uzun vadede daha faydalı olabilir.
Başka Hangi Finans Verilerini Taratabilirsiniz?
Aldığımız finans verileri, Yahoo Finance'deki bir şirketin özet sayfasından alınmıştır. Her şirketin ayrıca beş yıla kadar hisse senedi verilerini görebileceğiniz bir grafik sayfası vardır. Veriler tam olarak çok yapılandırılmış olmasa da, tarayabilmek size bir şirketin hisse senetlerinin tarihsel performansı hakkında çok iyi bir fikir verebilir.
İstatistikler sayfası, yakaladıklarımıza ek olarak, otuzdan fazla farklı veri noktası sunar. Bunlar yapılandırılmış bir biçimdedir ve sağladığımıza benzer bir kod kullanılarak kazınabilir.
Geçmiş veriler, grafik sayfasındaki verileri içerir, ancak CSV'ye benzer bir biçimde - verileri kolayca çıkarabilir ve bir CSV'de saklayabilirsiniz. Profil, finansallar, analiz, seçenekler, hissedarlar ve sürdürülebilirlik gibi diğer sayfalar, şirketin hisselerinin rakiplerine kıyasla nasıl performans göstereceği konusunda size iyi bir tahmin verebilir.
Yahoo Finance Data'nın kullanılmış örnekleri
Hisse senedi fiyatlarını tahmin etmek için geçmiş verileri kullanabilir veya kullanıcılara güncellemeler sağlamak için kazıma motorunuzdan düzenli olarak güncellenen verileri kullanan bir uygulama oluşturabilirsiniz. Hisse senetlerini ne zaman satması gerektiğini veya ne zaman daha fazla satın alması gerektiğini önerebilirsiniz - olasılıklar sonsuzdur!
Küçük bir ekibiniz varsa ve web kazıma işlemine nasıl başlayacağınıza karar veremiyorsanız, PromptCloud gibi kararlı ve deneyimli bir web kazıma ekibinden yardım alabilirsiniz. Web kazıma gereksinimi toplama panomuz, gereksinimleri göndermeyi, fiyat teklifi almayı ve son olarak verileri tak ve çalıştır biçiminde basit ve anlaşılır bir işlem haline getirir.
Web verilerini çıkarma konusunda yardıma mı ihtiyacınız var?
Web kazıma hizmetlerimiz aracılığıyla iş uygulamaları için web sitelerinden temiz ve kullanıma hazır veriler alın.
Hata! Formunuzu bulamadık.
Sorumluluk Reddi: Bu eğitimde sağlanan kod yalnızca öğrenme amaçlıdır. Nasıl kullanıldığından sorumlu değiliz ve kaynak kodunun herhangi bir zararlı kullanımı için hiçbir sorumluluk kabul etmiyoruz.
