Belajar Mengikis Data Keuangan menggunakan Python
Diterbitkan: 2019-04-26Pasar saham adalah database besar dengan jutaan entri yang diperbarui setiap detik. Meskipun ada banyak perusahaan yang menyediakan data keuangan perusahaan, biasanya melalui API (Application programming interface). Dan seperti yang sudah Anda duga, API ini tidak pernah gratis. Yahoo Finance adalah sumber data pasar saham tepercaya dan memiliki API berbayar. Kami akan memandu Anda dalam proses langkah demi langkah tentang cara mengikis data Yahoo Finance menggunakan Python.
Mengapa Merangkak Data dari Yahoo Finance?
Jika Anda memerlukan data keuangan yang bersih dan gratis dari sumber tepercaya, Yahoo Finance adalah pilihan terbaik Anda. Halaman web profil perusahaan dibuat dalam struktur yang seragam, membuat web scraping python mudah. Jika Anda menulis skrip untuk merayapi data dari halaman keuangan Microsoft, skrip yang sama juga dapat digunakan untuk merayapi data dari halaman keuangan Apple.
Bagaimana Mengikis Data Keuangan Web menggunakan Python?
Untuk instalasi dan memulai, Anda dapat merujuk langkah-langkah dasar dari artikel ini tentang pengikisan data python , di mana kami membahas cara merayapi data dari portal pemesanan hotel terkemuka. Setelah Anda menginstal semua dependensi bersama dengan editor kode Atom, mari kita mulai dengan menghapus Yahoo Finance dengan Python.
1. Mulailah dengan Kode untuk Menggores dengan Python
Setelah tahap instalasi dan pengaturan selesai, kita bisa langsung masuk ke kode dan memulai Yahoo Finance Scraping. Kode diberikan lebih lanjut di bawah ini dan dapat dijalankan hanya dengan menggunakan perintah Python.

Anda dapat menjalankan kode dengan cara yang ditunjukkan di atas. Saat diminta, cukup masukkan URL perusahaan yang ringkasan keuangannya ingin Anda periksa. Kami telah menggunakan tautan untuk Microsoft.
[bahasa kode="python"]
#!/usr/bin/python
# -*- koding: utf-8 -*-
impor urllib.request
impor urllib.parse
impor urllib.error
dari bs4 impor BeautifulSoup
impor ssl
impor json
impor ast
impor os
dari urllib.request Permintaan impor, urlopen
# Untuk mengabaikan kesalahan sertifikat SSL
ctx = ssl.create_default_context()
ctx.check_hostname = Salah
ctx.verify_mode = ssl.CERT_NONE
# Masukan dari pengguna
url = input('Masukkan Url Perusahaan Keuangan Yahoo-')
# Membuat situs web percaya bahwa Anda mengaksesnya menggunakan browser Mozilla
req = Permintaan(url, header={'User-Agent': 'Mozilla/5.0'})
halaman web = urlopen(req).read()
# Membuat objek BeautifulSoup dari halaman HTML untuk memudahkan ekstraksi data.
sup = BeautifulSoup(halaman web, 'html.parser')
html = sup.prettify('utf-8')
company_json = {}
other_details = {}
untuk span di soup.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()
untuk div di soup.findAll('div', attrs={'class': 'D(ib) Va(t)'}):
untuk rentang di div.findAll('span', recursive=False):
company_json['PRESENT_GROWTH'] = span.text.strip()
untuk td di soup.findAll('td', attrs={'data-test': 'PREV_CLOSE-value'}):
untuk rentang di td.findAll('span', recursive=False):
other_details['PREV_CLOSE'] = span.text.strip()
untuk td di soup.findAll('td', attrs={'data-test': 'OPEN-value'}):
untuk rentang di td.findAll('span', recursive=False):
other_details['OPEN'] = span.text.strip()
untuk td di soup.findAll('td', attrs={'data-test': 'BID-value'}):
untuk rentang di td.findAll('span', recursive=False):
other_details['BID'] = span.text.strip()
untuk td di soup.findAll('td', attrs={'data-test': 'ASK-value'}):
untuk rentang di td.findAll('span', recursive=False):
other_details['ASK'] = span.text.strip()
untuk td di soup.findAll('td', attrs={'data-test': 'DAYS_RANGE-value'}):
untuk rentang di td.findAll('span', recursive=False):
other_details['DAYS_RANGE'] = span.text.strip()
untuk td di soup.findAll('td',
attrs={'data-test': 'FIFTY_TWO_WK_RANGE-value'}):
untuk rentang di td.findAll('span', recursive=False):
other_details['FIFTY_TWO_WK_RANGE'] = span.text.strip()
untuk td di soup.findAll('td', attrs={'data-test': 'TD_VOLUME-value'}):
untuk rentang di td.findAll('span', recursive=False):
other_details['TD_VOLUME'] = span.text.strip()
untuk td di soup.findAll('td',
attrs={'data-test': 'nilai AVERAGE_VOLUME_3MONTH'
}):
untuk rentang di td.findAll('span', recursive=False):
other_details['AVERAGE_VOLUME_3MONTH'] = span.text.strip()
untuk td di soup.findAll('td', attrs={'data-test': 'MARKET_CAP-value'}):
untuk rentang di td.findAll('span', recursive=False):
other_details['MARKET_CAP'] = span.text.strip()
untuk td di soup.findAll('td', attrs={'data-test': 'BETA_3Y-value'}):
untuk rentang di td.findAll('span', recursive=False):
other_details['BETA_3Y'] = span.text.strip()
untuk td di soup.findAll('td', attrs={'data-test': 'PE_RATIO-value'}):
untuk rentang di td.findAll('span', recursive=False):
other_details['PE_RATIO'] = span.text.strip()
untuk td di soup.findAll('td', attrs={'data-test': 'EPS_RATIO-value'}):
untuk rentang di td.findAll('span', recursive=False):
other_details['EPS_RATIO'] = span.text.strip()
untuk td di soup.findAll('td', attrs={'data-test': 'EARNINGS_DATE-value'
}):
other_details['EARNINGS_DATE'] = []
untuk rentang di td.findAll('span', recursive=False):
other_details['EARNINGS_DATE'].append(span.text.strip())
untuk td di soup.findAll('td',
attrs={'data-test': 'DIVIDEND_AND_YIELD-value'}):
other_details['DIVIDEND_AND_YIELD'] = td.text.strip()
untuk td di soup.findAll('td',
attrs={'data-test': 'EX_DIVIDEND_DATE-value'}):
untuk rentang di td.findAll('span', recursive=False):
other_details['EX_DIVIDEND_DATE'] = span.text.strip()
untuk td di soup.findAll('td',
attrs={'data-test': 'ONE_YEAR_TARGET_PRICE-value'
}):
untuk rentang di td.findAll('span', recursive=False):
other_details['ONE_YEAR_TARGET_PRICE'] = span.text.strip()
company_json['OTHER_DETAILS'] = other_details
dengan open('data.json', 'w') sebagai outfile:
json.dump (perusahaan_json, file keluar, indentasi = 4)
perusahaan cetak_json
dengan open('output_file.html', 'wb') sebagai file:
file.tulis(html)
print '———- Ekstraksi data selesai. Periksa file json.———-'

[/kode]
Setelah Anda menjalankan kode dan memasukkan URL perusahaan, Anda akan melihat json tercetak di terminal Anda. Json ini juga akan disimpan ke file dengan nama "data.json" di folder Anda. Untuk Microsoft, kami memperoleh JSON berikut.
[bahasa kode="python"]
{
“PRESENT_GROWTH”: “+1,31 (+0,67%)”,
“PRESENT_VALUE”: “197.00”,
“PREV_CLOSE”: “195.69”,
“BUKA”: “196.45”,
“TAWARAN”: “196,89 x 900”,
“TANYA”: “197.00 x 1400”,
“TD_VOLUME”: “18.526.644”,
“AVERAGE_VOLUME_3MONTH”: “29.962.082”,
“MARKET_CAP”: “928.91B”,
“BETA_3Y”: “0.91”,
“PE_RATIO”: “16.25”,
“EPS_RATIO”: “12.12”,
“EARNINGS_DATE”: [
“30 April 2019”
],
“DIVIDEND_AND_YIELD”: “2.92 (1.50%),
“EX_DIVIDEND_DATE”: “08-02-2019”,
“ONE_YEAR_TARGET_PRICE”: “190.94”
}
[/kode]
Untuk Apple, yang telah membuat banyak kerugian akhir-akhir ini, JSON terlihat seperti ini.
[bahasa kode="python"]
{
“PRESENT_VALUE”: “198,87”,
“PRESENT_GROWTH”: “-0,08 (-0,04%)”,
"RINCIAN LAINNYA": {
“PREV_CLOSE”: “198,95”,
“BUKA”: “199.20”,
“TAWARAN”: “198,91 x 800”,
“TANYA”: “198,99 x 1000”,
“TD_VOLUME”: “27.760.668”,
“AVERAGE_VOLUME_3MONTH”: “28.641.896”,
“MARKET_CAP”: “937.728B”,
“BETA_3Y”: “0.91”,
“PE_RATIO”: “16.41”,
“EPS_RATIO”: “12.12”,
“EARNINGS_DATE”: [
“30 Apr 2019”
],
“DIVIDEND_AND_YIELD”: “2.92 (1.50%),
“EX_DIVIDEND_DATE”: “08-02-2019”,
“SATU_YEAR_TARGET_PRICE”: “193.12”
}
}
[/kode]
Anda dapat melakukan hal yang sama dengan sejumlah perusahaan yang Anda inginkan dan sesering yang Anda ingin tetap diperbarui.
2. Penjelasan Kode Crawler
Seperti kode scraping web sebelumnya, dalam kode ini juga, pertama-tama kita memperoleh seluruh file HTML. Dari situ, kami mengidentifikasi tag tertentu (dengan kelas tertentu) yang memiliki data yang kami butuhkan. Langkah ini dilakukan secara manual untuk satu halaman detail perusahaan. Setelah tag spesifik dan kelas masing-masing diidentifikasi, kami menggunakan sup yang indah untuk mengeluarkan tag tersebut, menggunakan kode kami.
Kemudian dari masing-masing tag tersebut, kami menyalin data yang diperlukan ke dalam variabel yang disebut company_json. Ini adalah json yang akhirnya kami tulis ke dalam file tipe JSON bernama data.json. Anda dapat melihat bahwa kami juga menyimpan scraped HTML ke dalam file bernama output_file.html di memori lokal Anda. Ini dilakukan agar Anda dapat menganalisis halaman HTML sendiri dan menemukan teknik python pengikisan data lainnya untuk merayapi lebih banyak data.
3. Beberapa Data Point Penting yang Kami Tangkap
- PREV_CLOSE: Ini mengacu pada harga penutupan saham pada hari perdagangan sebelumnya. Nilai saham hari sebelumnya hanya mengacu pada harga penutupan terakhir pada hari ketika pasar saham dibuka (bukan hari libur).
- OPEN: Harga pembukaan yang juga disebut dengan Open, adalah harga awal dari sebuah saham pada hari perdagangan. Misalnya, harga pembukaan untuk pasar saham mana pun di New York Stock Exchange (NYSE) adalah harganya pada pukul 09:30 waktu bagian Timur.
- BID & ASK: Kedua harga adalah kuotasi pada satu lembar saham. Bid mengacu pada harga yang pembeli bersedia bayar untuk itu sedangkan ask adalah untuk apa penjual bersedia menjualnya. Pengganda mengacu pada jumlah saham yang menunggu perdagangan pada harga masing-masing.
- TD_VOLUME: Ini hanyalah jumlah saham yang berpindah tangan pada siang hari.
- PE_RATIO: Mungkin faktor tunggal paling penting yang diperhatikan investor, ini dihitung dengan membagi harga pasar saat ini dari saham perusahaan dengan pendapatan per saham perusahaan. Sederhananya itu adalah jumlah uang yang siap untuk dibayar untuk setiap rupee senilai pendapatan perusahaan.
Alasan mengapa kami menjelaskan beberapa poin data penting adalah karena kami ingin Anda mengetahui seberapa dalam Anda dapat menyelami keuangan perusahaan, hanya dengan mengambil data dari halaman Yahoo Finance.
Data apa yang dapat Anda jelajahi dari Yahoo Finance?
Anda akan dapat merayapi titik data yang berbeda menggunakan scraper Python ini. Nilai sekarang dan persentase pertumbuhan atau penurunan saat ini adalah yang paling penting. Poin data lainnya, jika dilihat bersama, memberikan gambaran yang lebih baik dan membantu seseorang memutuskan apakah berinvestasi di saham perusahaan merupakan ide yang bagus atau tidak. Melihat snapshot dari data mungkin tidak terbukti terlalu efektif. Mengikis data secara berkala dan menggunakan kumpulan data besar untuk memprediksi harga saham di masa depan mungkin terbukti lebih berguna dalam jangka panjang.
Data Keuangan Apa Lagi yang Dapat Anda Merangkak?
Data keuangan yang kami gores berasal dari halaman ringkasan sebuah perusahaan di Yahoo Finance. Setiap perusahaan juga memiliki halaman bagan, di mana Anda dapat melihat data saham hingga lima tahun. Meskipun datanya tidak terlalu terstruktur, dapat dijelajahi mungkin memberi Anda wawasan yang sangat baik tentang kinerja historis saham suatu perusahaan.
Halaman statistik memberi Anda lebih dari tiga puluh titik data yang berbeda, melebihi dan di atas yang kami tangkap. Ini dalam format terstruktur dan dapat digores menggunakan kode yang mirip dengan yang kami berikan.
Data historis berisi data dari halaman bagan, tetapi dalam format yang mirip dengan CSV – Anda dapat dengan mudah mengekstrak data dan menyimpannya dalam CSV. Halaman lain seperti profil, keuangan, analisis, opsi, pemegang, dan keberlanjutan mungkin memberi Anda perkiraan yang baik tentang bagaimana kinerja saham perusahaan dibandingkan dengan pesaingnya.
Kasus yang digunakan dari Data Yahoo Finance
Anda dapat menggunakan data historis untuk memprediksi harga saham, atau Anda dapat membuat aplikasi yang menggunakan data yang diperbarui secara berkala dari mesin pengikis Anda untuk memberikan pembaruan kepada pengguna. Anda dapat merekomendasikan kapan seseorang harus menjual saham mereka, atau kapan mereka harus membeli lebih banyak – kemungkinannya tidak terbatas!
Jika Anda memiliki tim kecil dan tidak dapat memutuskan bagaimana memulai dengan web scraping, Anda dapat mengambil bantuan dari tim web scraping yang berkomitmen dan berpengalaman seperti PromptCloud. Dasbor pengumpulan persyaratan scraping web kami membuat persyaratan pengiriman, mendapatkan penawaran, dan akhirnya mendapatkan data dalam format plug and play menjadi proses yang sederhana dan mudah.
Butuh bantuan untuk mengekstrak data web?
Dapatkan data bersih dan siap pakai dari situs web untuk aplikasi bisnis melalui layanan pengikisan web kami.
Ups! Kami tidak bisa menemukan formulir Anda.
Penafian: Kode yang disediakan dalam tutorial ini hanya untuk tujuan pembelajaran. Kami tidak bertanggung jawab atas cara penggunaannya dan tidak bertanggung jawab atas penggunaan kode sumber yang merugikan.
