1
4

Pythonで超簡単スクレイピングOpenScrapeを使う

Posted at

はじめに

連休に入るにあたり、以前から作成したかった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()

下記のように推移グラフも出てきました。
9ceb345d-1356-4ac8-a298-0401283cce9b.png

これ以外にも機能もありますし、追加していければと思っていますので、ISSUE立て等お願いできればと思います。
以上、OpenScrapeの紹介でした。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4