LoginSignup
0
1

More than 1 year has passed since last update.

ウマ娘のレース管理アプリを作る【1】〜スクレイピング編〜

Last updated at Posted at 2021-06-07

ウマ娘をやってて、ミッションなどで特定のレースに出走する必要があったりする場合、そのレースがいつ開催されるのか、そしてそのミッションをクリアしたかどうかをアプリで管理できたら良いと思いませんか?
まぁ、大手攻略サイトと、TODOリストアプリ使えばいいんですが、Pythonのコーディング練習とか含めてやってみようと思います。
スクレイピングや、tkinterの使い方のメモなどになればいいかなと。

手順

  1. スクレイピングでレースデータを取得【今回やる】
  2. データを使ってGUIアプリケーションを作る(検索&TODOリスト登録)

使用開発環境

  • Python 3.8.3
  • beautifulsoup4 4.9.1
  • pandas 1.0.5
  • エディタ:VScode

スクレイピングでレースデータを取得

レースデータを一つ一つ入力していくのは時間がかかるのでGame With様から取得させていただきます。
サイトはこちら
ただ、スクレイピングをする上で自分が気をつけているのは、「インターネット上にある誰かのデータを借りている」「データ取得のリクエストにはサーバーに負担をかけている」ということを意識することです。
なので簡単に実行できないようにURLや内部のクラス名などは明記しません。

from bs4 import BeautifulSoup
import requests
import pandas as pd

URL=''
RACE_CLASS=''

# リクエスト&読み込み
load_url = URL
html = requests.get(load_url)
soup = BeautifulSoup(html.content, 'html.parser')

lis_td = []     # td要素を入れるためのリスト
lis_a = []      # a要素を入れるためのリスト

# レース毎に設定されてるクラスから一つずつ取り出す
for element in soup.find_all(class_=RACE_CLASS):
    # 要素内のデータを整形して、項目毎のレースデータを作成
    lis = [i.text for i in element.find_all('td')]
    lis_td.append(lis[0].split(' ') + lis[1].split(' / '))
    lis_a.append([i.text for i in element.find_all('a')])

# 空リストを削除する
while [] in lis_a:
    i = lis_a.index([])
    lis_a.pop(i)
    lis_td.pop(i)

# リスト内の空要素を削除
lis_a = [i[1] for i in lis_a]

# データフレーム形式でデータを整形
df = pd.DataFrame(lis_td, columns=RACE_COLUMNS)
se = pd.Series(lis_a)
df['レース名'] = se

# 出力
df.to_csv(OUTPUT_CSV)

ソースコードの細かい処理などはコード内のコメントを見てください。

参考文献

Git Hub

0
1
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
0
1