[PYTHON] Gratter la page du portefeuille SBI Securities

introduction

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.

  1. Grattage de la page du portefeuille SBI Securities
  2. Écrivez les données récupérées dans la feuille de calcul Google ↓ Écrivez comme ça. スクリーンショット 2019-12-29 23.22.53.png

environnement

procédure

Environnement

Supposition:

  1. Installez les modules requis

--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. Paramètres Google La page ci-dessous est magnifique, alors je vais faire exactement cela https://tanuhack.com/operate-spreadsheet/#Google_Cloud_Platform

code

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
  1. La pièce à gratter
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
  1. Écrire sur une feuille de calcul
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)
  1. Combinez les pages ci-dessus
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:

Recommended Posts

Gratter la page du portefeuille SBI Securities
Grattage du résultat de "Schedule-kun"
Gratter la moyenne du Nikkei avec le dramaturge-python
Gratter la page i-town avec du sélénium