Investing.comのドル円の情報を、スプレッドシートに貼りつけるプログラム
●概要
いつもお世話になっている先生から、
「Investing.comからドル円の状況を自動で引用して、スプレッドシートに貼り付けられる?」
というご要望を頂きましたので、作成しました。
●事前準備
1:Jupyter Labを使える様にする
Anacondaなどをダウンロードしておき、
Jupyter Labを使えるように置いて下さい。
https://anaconda.org/conda-forge/jupyterlab
2:スプレッドシートを使えるようしておく
Gmailアカウントを用意しておき、スプレッドシートにしてログインが出来れば大丈夫です。
3:スプレッドシートのAPIを有効化しておく
プログラムからスプレッドシートにデータを書き込む為の対応を行います
https://www.youtube.com/watch?v=fFSGPciIkfI
上記のキノコード様のこの動画を参考にされるのが、一番良いと思います。
※秘密鍵の発行まで対応されれば問題ありません
4:Chrome DriverをDLしておく
Investing.comから情報を取得する為、
ご自身のGoogle Chromeと近いChrome DriverをDLしたおきます
Chrome DriverのDLページ
https://chromedriver.chromium.org/downloads
またGoogle Chromeのバージョン確認は下記のプログを参照して下さいhttps://support.biglobe.ne.jp/settei/browser/chrome/chrome-013.html
●プログラムコード
・初期設定
こちらはコードは一回だけ行えば大丈夫です
!pip install openpyxl
!pip install selenium
!pip install beautifulsoup4
!pip install pandas
!pip install google-auth google-auth-oauthlib google-auth-httplib2
!pip install gspread
!pip install gspread_dataframe
!pip install os
・実際に使うコード
chromedriver_path = "chromedriver.exeが格納されてるフォルダを指定する"
chromedriver = os.listdir(chromedriver_path)
chromedriver_files =chromedriver_path+chromedriver[0]
driver = webdriver.Chrome(chromedriver_files)
url="https://jp.investing.com/currencies/usd-jpy-historical-data"
driver.get(url)
# Wait for some time for the page to fully load
time.sleep(5)
# Parse the page source with BeautifulSoup
soup = BeautifulSoup(driver.page_source, 'html.parser')
# Find the table
table = soup.find('table', {'class': 'datatable_table__D_jso datatable_table--border__B_zW0 datatable_table--mobile-basic__W2ilt datatable_table--freeze-column__7YoIE'})
table_rows = table.find_all('tr')
res = []
for tr in table_rows:
td = tr.find_all('td')
row = [tr.text.strip() for tr in td if tr.text.strip()]
if row:
res.append(row)
df = pd.DataFrame(res, columns=["日付け", "終値", "始値", "高値", "安値", "出来高", "変化率"])
# 先ず、dfheadをCSVとして一時保存します
df.to_csv('temp.csv', index=False, header=False, encoding="cp932")
pdo1= pd.read_csv('temp.csv',encoding="cp932")
SCOPES = ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive.file']
creds = Credentials.from_service_account_file('フォルダに格納した秘密鍵のjsonファイル', scopes=SCOPES)
# Use the gspread library to authorize and interact with the sheets.
gc = gspread.authorize(creds)
# スプレッドシートを開く
spreadsheet = gc.opeby_url('スプレッドシートのurl')
# シート1を選択
worksheet = spreadsheet.worksheet('書き込むシートの名称')
# A列で最後のセルを見つけます
values_list = worksheet.col_values(1)
last_row_number = len(values_list)
# 最後のセルの次のセルからデータフレームの内容を書き込みます
set_with_dataframe(worksheet, pdo1, row = last_row_number+1, include_index=False)
●注意点
1:初期設定の各種のパッケージは必ず行なって下さい
少し時間は掛かりますが、一度行えば今後このステップは飛ばしてもう問題ありません
2:各ファイルなどの環境はご自身の物で合わせてください
指定箇所は以下の物になります
・chromedriver_path = "chromedriver.exeが格納されてるフォルダを指定する"
┗使用するchromedriver.exeがある、フォルダを指定します
┗コードではフォルダ内の一番上のファイルを指定しているので、フォルダ内にはchromedriver.exe以外は格納しないことをお勧めします
┗chromedriver.exeは定期的に更新が入るので、下記のようにファイルを入れ替えるだけにしておくと楽です
chromedriver_path = "C:/Users/pcアカウント名/Desktop/プログラム/元ファイル/chromedriver/"
・spreadsheet = gc.opeby_url('スプレッドシートのurl')
┗ここで書き込むスプレッドシートのurlを指定します
・worksheet = spreadsheet.worksheet('書き込むシートの名称')
┗ここでスプレッドシートで書き込むシートを指定します
●改良点
恐らくドル円以外にも抽出する必要があるので、そこは考えておく必要がある
↓↓↓
ExcelにDLしたいページと書き込み用のスプレッドシート名を記載しておき、それを呼び出す感じの物になるのかな、とは思っております