LoginSignup
2

More than 3 years have passed since last update.

「日程くん」の結果をスクレイピングする

Last updated at Posted at 2020-01-25

概要

先日、2020明治安田生命Jリーグの日程が発表されました。(リリース
このリリースにはPDF形式でJ1・J2・J3リーグの日程が提供されています。
また、Jリーグでは様々なデータを試合軸・チーム軸・選手軸で別サイトに提供しています。

Jleague Data Site

本投稿は、PDF形式をスクレイピングすのではなく、上記サイトで提供されている「日程・結果」メニューから得られるページをpandasが提供するread_htmlを使って簡単に取得します。

URL構成

https://data.j-league.or.jp/SFMS01/search?competition_years=2020&competition_frame_ids=1&competition_ids=477&tv_relay_station_name=
  • 基本:https://data.j-league.or.jp/
  • アプリ名?:SFMS01
  • パラメータ1:competition_years=2020 #年度
  • パラメータ2:competition_frame_ids=1 #カテゴリー(J1)
  • パラメータ3:competition_ids=477 #年度ごとのID
  • それ以外は固定のまま

コード説明

game_schedule.py
# cording:uft-8
import pandas as pd
yyyy = 2020
url = 'https://data.j-league.or.jp/SFMS01/search?'
category = {'1': 477, '2': 478, '3': 479}
schedule = pd.DataFrame(index=None, columns=['年度', '大会', '節', '試合日', 'K/O時刻', 'ホーム', 'スコア', 'アウェイ', 'スタジアム', '入場者数', 'インターネット中継・TV放送'])

J1・J2・J3のカテゴリーと年度ごとのIDをdic形式で作成する。
空のデータフレームを作成する。

game_schedule.py
for key, value in category.items():
    para = 'competition_years=' + str(yyyy)
    para1 = '&competition_frame_ids=' + str(key)
    para2 = '&competition_ids=' + str(value)
    para3 = '&tv_relay_station_name='

    full_url = url + para + para1 + para2 + para3
    # print(full_url)
    df = pd.read_html(full_url, attrs={'class': 'table-base00 search-table'}, skiprows=0)
    schedule = pd.concat([schedule, df[0]], sort=False)

ポイントは、pd.read_html(full_url, attrs={'class':'table-base00 search-table'}...で、対象のURLと<table>の属性を指定しています。
取得したものをscheduleに結合します。

game_schedule.py
# NaNを置き換えたければ
# schedule = schedule.fillna({'KO時刻': '●未定●', '入場者':0})
schedule.to_csv('./csv/Game_Schedule_' + str(yyyy) + '.csv', index=False, sep=',')

指定フォルダにcsv形式で保存します。

まとめ

  • シンプルな<table>pandasread_htmlで簡便に取得できる。

データの活用

  • 応援するチームのみ抽出して、遠征するスケジュールに利用する。
  • 試合後は、スコアや入場者数の実績が登録されるので分析に利用できる。

「日程くん」について

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
2