初心者向け学習方法一覧はこちら
実際にスクレイピングで日経平均株価のデータ収集をしてみよう!
前回はスクレイピングに必要な環境構築と、スクレイピングの注意点について解説しました。
今回は日本経済新聞様のページをスクレイピングして日経平均株価のデータを収集しましょう!
まずスクレイピングするまでの一連の流れを紹介します。
・スクレイピングを許可されているのか確認
・スクレイピングを行う為の下準備
・コーディング
スクレイピングを許可されているか確認
まずスクレイピングを許可されているか対象ページの利用規約を確認します。
今回スクレイピングしたいのはこの日本経済新聞様のページです。
まずrobot.txtが用意されているか確認します。
「https://www.nikkei.com/robots.txt」と検索してみます。
検索するとこのような画面が表示されます。
表示されている内容の説明をします。
「User-agent」の部分は許可するユーザーを表しています。
今回表示されている「*」は全てのユーザーを許可するという意味です。
次に「Allow」と「Disallow」の部分です。
「Allow」はスクレイピングを許可するという意味です。
「Disallow」はスクレイピングを許可しないという意味です。
通常「Allow」は記載する必要はありませんがここでは「Disallow」で制限している部分の中で一部分のみ許可するために記載されています。
よって今回スクレイピングしたいページ「www.nikkei.com/markets/worldidx/」についてはなにも記載されていない為、スクレイピングを制限されていないとわかります。
これで対象のページがスクレイピングすることを禁止されていないことが確認出来ました。
スクレイピングを行うための下準備
次に下準備を行います。
下準備とはスクレイピングを行う上で抽出したい部分をPythonに指定する為にWEBページの構造を解析することです。
それにはブラウザの「Devtool」の検証機能を使用します!
検証機能のショートカットキーは「ctrl+shift+C」です。
検証機能を用いることでマウスカーソルを合わせた部分がWEBページのどのコードなのか確認することが出来ます。
今回の場合取得したいのは現在値です。
マウスカーソルを合わせると現在値の要素はクラス名が「economic_value_now」であること。
サイト内検索で「ctrl+F」を使用することで同じクラス名のものは存在しないとわかります。
コーディング
それでは日経平均株価の現在値を取得し、CSVファイルに書き込みをするプログラムを作成しましょう!
CSVファイルとはプログラミングを使用するのに適したファイル形式です。
Pythonで開くことができるのはもちろんExcelで開くこともできる便利なファイル形式です!
まず必要ライブラリのインポートとChorome driverの設定です。
以下のコードに自分のパソコンのChorome driverのパスを入れてください
from selenium import webdriver
import csv
import os
import datetime
url_source =r"https://www.nikkei.com/markets/worldidx/chart/nk225/"
CHROMEDRIVER = "C:\python\chromedriver.exe"#自分のChrome driverのPathを入力
driver = webdriver.Chrome(CHROMEDRIVER)
driver.get(url_source)
次に自分のパソコンにある今までの日経平均株価データを収集するコードです。
「MYDATA」の部分は保存先にしたいパスを自分で入力してください。
MYDATA = r"C:\python\nikkei_data.csv"#保存先を指定
if os.path.isfile(MYDATA):#ファイルが存在しない時の処理
with open(MYDATA, 'w') as f:
f.write('')
with open(MYDATA, 'r',encoding='utf-8-sig') as f:
write_list = f.readlines()
それでは日経平均株価の現在値のデータを収集しましょう!
以下のコードで実行できます。
now_data1 = driver.find_element_by_class_name("economic_value_now")
now_data2 = driver.find_element_by_class_name("economic_value_time")
次に作成したデータをCSVファイルに書き込みましょう
date = datetime.date.today()
data1 = now_data1.text
date1 = str(date.month) + "/" + str(date.day) + "/"
date2 = now_data2.text[5:10]#時間の部分のみを取り出す
write_data = date1 + date2 + " " + data1
write_list.append(write_data)#追記書込
driver.quit()
with open(MYDATA,'w',encoding='utf-8',newline='\n')as f:
wrtr = csv.writer(f,delimiter='\n')
wrtr.writerow(write_list)
今回のコードでのデータの保存形式ですが、データは「収集日時 [半角スペース] 現在値」で保存するようにしています。
また、並び順は上の行が古く下の行が新しいように記入されています。
完成したコード
そして完成したコードはこのようになります。
from selenium import webdriver
import csv
import os
import datetime
url_source =r"https://www.nikkei.com/markets/worldidx/chart/nk225/"
CHROMEDRIVER = "C:\python\chromedriver.exe"#自分のChrome driverのPathを入力
driver = webdriver.Chrome(CHROMEDRIVER)
driver.get(url_source)
MYDATA = r"C:\python\nikkei_data.csv"#保存先を指定
if os.path.isfile(MYDATA):#ファイルが存在しない時の処理
with open(MYDATA, 'w') as f:
f.write('')
with open(MYDATA, 'r',encoding='utf-8-sig') as f:
write_list = f.readlines()
now_data1 = driver.find_element_by_class_name("economic_value_now")
now_data2 = driver.find_element_by_class_name("economic_value_time")
date = datetime.date.today()
data1 = now_data1.text
date1 = str(date.month) + "/" + str(date.day) + "/"
date2 = now_data2.text[5:10]#時間の部分のみを取り出す
write_data = date1 + date2 + " " + data1
print(write_data)
write_list.append(write_data)#追記書込
driver.quit()
with open(MYDATA,'w',encoding='utf-8',newline='\n')as f:
wrtr = csv.writer(f,delimiter='\n')
wrtr.writerow(write_list)
このプログラムはファイルに追記していくの定期的に実行することでデータが蓄積されます。
その蓄積されたデータを使用してグラフを作成し、動きを可視化することもできます!
通常過去の日経平均株価を数値で取得しようとすると2000円ほどの料金がかかります。
しかしPythonが使える人はこのコードを定期実行するだけでデータを無料で入手できます!
また今回のスクレイピングの内容は1ページのみのスクレイピングの為サーバーに負荷をかけることは考えづらく遅延措置はしておりません。
応用して他のページをスクレイピングする際、複数のページをスクレイピングする必要がある場合は「time」モジュール等を使用して遅延措置を行う事を忘れないでください!
まとめ
今回はPythonを用いてスクレイピングする方法を紹介しました。
収集した情報を使用してどうするのかはいろいろな方法があります。
一例としてAIの学習に使用するという方法があります。
Pythonを使用した簡素なAIの作り方を以下の記事で紹介しているので是非こちらもどうぞ!
プログラミングスクールの選び方
転職を検討中の方向け
フリーランス・副業で活躍したい方向け
教養・キャリアアップしたい方向け
給付金について詳しく知りたい方向け