はじめに
連休に入るにあたり、以前から作成したかったPythonライブラリを作りました!AI学習などでは、スクレイピングはデータ収集において欠かせない要素となっています。そのため、より効率的にデータを収集できるライブラリを目指し、開発を進めました。現在もまだ開発段階ではありますが、皆様からのフィードバックや要望をISSUEにてお待ちしております。ISSUEは日本語や英語でも受け付けていますが、それ以外の言語での投稿はご遠慮ください。
下記からISSUEを作成できます。
使用に関して、各ウェブサイトのrobots.txtを確認し、組み込もうとしているサービスが禁止されているボットに該当しないかどうか確認ください。
OpenScrapeとは
様々なサービスからデータをスクレイピングするためのPythonライブラリです。現在はGoogle検索、日経株価、日本のリアルタイムアニメランキング(dアニメランキング)に対応しており、将来的には他の多様なサービスからのスクレイピングにも対応する予定です。
使い方
下記にサンプルをおいています。
今回はこのライブラリから株価推移を取得しグラグにプロットしてみようと思います。
JupyterNotebookを使っています。
株価推移取得例
まずは、PythonライブラリであるOpenScrapeとデータ集計用のpandasと表で出力するためのmatplotlibをインストールします。
!pip install git+https://github.com/umaxiaotian/OpenScrape.git@main
!pip install pandas
!pip install matplotlib
次に、証券コードをscodeに記載します。今回はサンプルで、伊藤忠商事株式会社のコードを入れます。
Listの中にJSONデータが出力されるはずです。
from OpenScrape import nikkei
import pandas as pd
# 証券コード (伊藤忠商事株式会社の証券コード)
scode = 8001
# 株価情報を取得
current_val=nikkei.get_stock_history(scode)
current_val
次にデータを整形しプロットする準備をします。
このnikkeiクラスのget_stock_historyは月/日しか入っていませんので、年を追加しています。
import matplotlib.pyplot as plt
# データをpandas DataFrameに変換
df = pd.DataFrame(current_val)
# データをpandas DataFrameに変換
# 日付の曜日を削除
df['date'] = df['date'].str.replace('(.*)', '', regex=True)
# 日付に年を追加
df['date'] = '2024/' + df['date']
# 日付をdatetime型に変換
df['date'] = pd.to_datetime(df['date'], format='%Y/%m/%d', errors='coerce')
# 株価を数値に変換
df['close_price'] = df['close_price'].str.replace(',', '').astype(float)
# 日付をインデックスに設定
df = df.set_index('date')
ここまで来ると、dfは下記のようになっています。
2024/2/10時点の伊藤忠商事株式会社の株価推移になります。
date | open_price | high_price | low_price | close_price | volume | adjusted_close_price |
---|---|---|---|---|---|---|
2024-02-08 | 6,702 | 6,719 | 6,592 | 6718.0 | 4,164,500 | 6,718.0 |
2024-02-07 | 6,525 | 6,736 | 6,512 | 6736.0 | 4,734,200 | 6,736.0 |
2024-02-06 | 6,587 | 6,617 | 6,502 | 6520.0 | 4,608,600 | 6,520.0 |
2024-02-05 | 6,800 | 6,805 | 6,614 | 6648.0 | 4,830,800 | 6,648.0 |
2024-02-02 | 6,748 | 6,844 | 6,693 | 6745.0 | 3,796,900 | 6,745.0 |
2024-02-01 | 6,690 | 6,784 | 6,680 | 6747.0 | 2,641,500 | 6,747.0 |
2024-01-31 | 6,564 | 6,769 | 6,554 | 6752.0 | 3,392,600 | 6,752.0 |
2024-01-30 | 6,673 | 6,721 | 6,632 | 6649.0 | 2,190,400 | 6,649.0 |
2024-01-29 | 6,550 | 6,685 | 6,550 | 6673.0 | 2,688,900 | 6,673.0 |
2024-01-26 | 6,626 | 6,626 | 6,522 | 6535.0 | 3,026,500 | 6,535.0 |
2024-01-25 | 6,645 | 6,672 | 6,618 | 6667.0 | 2,238,400 | 6,667.0 |
2024-01-24 | 6,686 | 6,735 | 6,630 | 6652.0 | 4,154,000 | 6,652.0 |
2024-01-23 | 6,647 | 6,714 | 6,581 | 6617.0 | 3,129,000 | 6,617.0 |
2024-01-22 | 6,595 | 6,647 | 6,549 | 6647.0 | 3,038,300 | 6,647.0 |
2024-01-19 | 6,620 | 6,627 | 6,527 | 6586.0 | 4,181,600 | 6,586.0 |
2024-01-18 | 6,584 | 6,673 | 6,519 | 6525.0 | 3,560,500 | 6,525.0 |
2024-01-17 | 6,600 | 6,730 | 6,574 | 6609.0 | 5,755,000 | 6,609.0 |
2024-01-16 | 6,675 | 6,739 | 6,543 | 6562.0 | 4,880,500 | 6,562.0 |
2024-01-15 | 6,639 | 6,769 | 6,604 | 6710.0 | 4,859,900 | 6,710.0 |
2024-01-12 | 6,510 | 6,573 | 6,433 | 6539.0 | 6,856,800 | 6,539.0 |
2024-01-11 | 6,240 | 6,409 | 6,228 | 6365.0 | 5,696,400 | 6,365.0 |
2024-01-10 | 5,994 | 6,100 | 5,978 | 6091.0 | 3,831,600 | 6,091.0 |
2024-01-09 | 5,978 | 6,022 | 5,884 | 5902.0 | 2,440,200 | 5,902.0 |
2024-01-05 | 5,780 | 5,912 | 5,780 | 5878.0 | 2,637,000 | 5,878.0 |
2024-01-04 | 5,767 | 5,821 | 5,671 | 5817.0 | 2,810,800 | 5,817.0 |
これをグラフ化します。
# グラフを描画
plt.figure(figsize=(14, 7))
plt.plot(df['close_price'], label='Close Price')
plt.title('Close Price Over Time')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid(True)
plt.show()
これ以外にも機能もありますし、追加していければと思っていますので、ISSUE立て等お願いできればと思います。
以上、OpenScrapeの紹介でした。