[PYTHON] Scraping der SBI Securities-Portfolio-Seite

Einführung

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.

  1. Scraping der SBI Securities Portfolio-Seite
  2. Schreiben Sie die kratzenden Daten in die Google-Tabelle ↓ Schreiben Sie so. スクリーンショット 2019-12-29 23.22.53.png

Umgebung

Verfahren

Umgebung

Annahme:

  1. Installieren Sie die erforderlichen Module
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. Google-Einstellungen Die Seite unten ist wunderbar, also werde ich genau das tun 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. Das zu kratzende Teil
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
  1. Schreiben Sie in die Tabelle
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)
  1. Kombinieren Sie die obigen Seiten
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:

Recommended Posts

Scraping der SBI Securities-Portfolio-Seite
Scraping das Ergebnis von "Schedule-Kun"
Schaben Nikkei Durchschnitt mit Dramatiker-Python
I-Town-Seite mit Selen abkratzen