J'avais l'habitude d'utiliser myTrade, mais depuis que le support a pris fin le 1/9, j'ai recherché diverses applications, mais il n'y avait pas d'application appropriée, j'ai donc gratté la page du portefeuille SBI moi-même et Google s'est propagé. J'ai décidé de gérer les données avec une feuille. Par conséquent, cette page présente les deux programmes suivants.
Supposition:
--Installez les modules requis avec pip
pip install selenium
pip install pandas lxml html5lib BeautifulSoup4
Téléchargez le pilote Chrome pour votre version de Google Chrome et placez-le dans votre PATH. (Référence: PATH sur Mac) Faites correspondre la version du pilote Chrome que vous téléchargez avec la version de Google Chrome que vous utilisez. S'il n'y a pas de correspondance, la plus proche.
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()
#Mode sans tête(Mode qui n'affiche pas de chrome)
options.add_argument('--headless')
#Créer un objet Chrome WebDriver
driver = webdriver.Chrome(options=options)
#Ouvrez l'écran supérieur de SBI Securities
driver.get('https://www.sbisec.co.jp/ETGate')
#Définir l'ID utilisateur et le mot de passe
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')
#Cliquez sur le bouton de connexion pour vous connecter
#La lecture du corps semble asynchrone, alors dors un peu
driver.find_element_by_name('ACT_login').click()
time.sleep(5)
driver.find_element_by_link_text('portefeuille').click()
#Code de caractère UTF-Convertir en 8
html = driver.page_source #.encode('utf-8')
#Perth avec une belle soupe
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, 'spécifique')
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']
#Paramètres d'identification
#Définissez le nom du fichier json téléchargé dans la variable d'informations d'identification (placez la clé privée dans une position facile à lire à partir du fichier Python)
credentials = ServiceAccountCredentials.from_json_keyfile_name('zzzzz.json', scope)
#Connectez-vous à l'API Google à l'aide de vos informations d'identification OAuth2.
gc = gspread.authorize(credentials)
#Variables pour les clés de feuille de calcul partagées[SPREADSHEET_KEY]Stocker dans.
SPREADSHEET_KEY = 'hogehoge'
#Ouvrez la feuille 1 de la feuille de calcul partagée
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():
#Obtenez les données pour gratter et rédiger le portfolio
stocks = get_stocks()
#Écrivez les données récupérées dans une feuille de calcul
write(stocks)
if __name__ == "__main__":
main()
Page de respect: