Help us understand the problem. What is going on with this article?

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

概要

先日、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で簡便に取得できる。

データの活用

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

「日程くん」について

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした