Früher habe ich myTrade verwendet, aber da der Support am 1/9 endete, habe ich nach verschiedenen Apps gesucht, aber es gab keine geeignete App. Deshalb habe ich die SBI-Portfolio-Seite selbst und die Google-Verbreitung durchsucht. Ich beschloss, die Daten mit einem Blatt zu verwalten. Daher werden auf dieser Seite die folgenden zwei Programme vorgestellt.
Annahme:
pip install selenium
pip install pandas lxml html5lib BeautifulSoup4
Laden Sie den Chrome-Treiber für Ihre Google Chrome-Version herunter und platzieren Sie ihn in Ihrem PATH. (Referenz: PATH auf Mac) Ordnen Sie die von Ihnen heruntergeladene Version des Chrome-Treibers der von Ihnen verwendeten Version von Google Chrome zu. Wenn es keine Übereinstimmung gibt, die nächstgelegene.
1.import
import time
import datetime
import gspread
import json
import pandas
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
from oauth2client.service_account import ServiceAccountCredentials
class Result():
def __init__(self, fund, amount):
self.fund = fund
self.amount = amount
def convert_to_list(data_frame, custody):
data_frame = data_frame.iloc[:, [1, 10]]
data_frame.drop([0], inplace=True)
data_frame.columns = ['funds', 'amount']
results = []
row_num = data_frame.shape[0]
for i in range(row_num):
index = i + 1
fund = data_frame.at[index, 'funds']
amount = data_frame.at[index, 'amount']
results.append(Result(custody + ':' + fund, amount))
return results
def get_stocks():
options = Options()
#Headless-Modus(Modus, in dem kein Chrom angezeigt wird)
options.add_argument('--headless')
#Erstellen Sie ein Chrome WebDriver-Objekt
driver = webdriver.Chrome(options=options)
#Öffnen Sie den oberen Bildschirm von SBI Securities
driver.get('https://www.sbisec.co.jp/ETGate')
#Legen Sie die Benutzer-ID und das Kennwort fest
input_user_id = driver.find_element_by_name('user_id')
input_user_id.send_keys('xxxx')
input_user_password = driver.find_element_by_name('user_password')
input_user_password.send_keys('yyyy')
#Klicken Sie auf die Anmeldeschaltfläche, um sich anzumelden
#Das Lesen des Körpers scheint asynchron zu sein, also schlafen Sie ein wenig
driver.find_element_by_name('ACT_login').click()
time.sleep(5)
driver.find_element_by_link_text('Portfolio').click()
#Zeichencode UTF-In 8 konvertieren
html = driver.page_source #.encode('utf-8')
#Perth mit schöner Suppe
soup = BeautifulSoup(html, "html.parser")
table = soup.find_all("table", border="0", cellspacing="1", cellpadding="4", bgcolor="#9fbf99", width="100%")
df_stocks = pandas.read_html(str(table))[0]
stocks = convert_to_list(df_stocks, 'Spezifisch')
df_nisa = pandas.read_html(str(table))[1]
nisa = convert_to_list(df_nisa, 'NISA')
result = []
for s in stocks:
result.append(s)
for n in nisa:
result.append(n)
driver.quit()
return result
def write(stocks):
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
#Anmeldeinformationseinstellungen
#Legen Sie den Namen der heruntergeladenen JSON-Datei in der Anmeldeinformationsvariablen fest (platzieren Sie den privaten Schlüssel an einem Ort, der aus der Python-Datei leicht zu lesen ist).
credentials = ServiceAccountCredentials.from_json_keyfile_name('zzzzz.json', scope)
#Melden Sie sich mit Ihren OAuth2-Anmeldeinformationen bei der Google-API an.
gc = gspread.authorize(credentials)
#Variablen für freigegebene Tabellenkalkulationsschlüssel[SPREADSHEET_KEY]Speichern in.
SPREADSHEET_KEY = 'hogehoge'
#Öffnen Sie Blatt 1 der freigegebenen Tabelle
worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1
headers = worksheet.row_values(1)
dates = worksheet.col_values(1)
new_row_num = len(dates) + 1
worksheet.update_cell(new_row_num, 1, datetime.datetime.today().strftime('%Y/%m/%d'))
for stock in stocks:
for i in range(len(headers)):
if headers[i] == stock.fund:
worksheet.update_cell(new_row_num, i + 1, stock.amount)
def main():
#Holen Sie sich die Daten, um das Portfolio zu kratzen und zu schreiben
stocks = get_stocks()
#Schreiben Sie die abgerufenen Daten in eine Tabelle
write(stocks)
if __name__ == "__main__":
main()
Respektseite: