はじめに
本記事は、Jリーグの公式サイトから自動で結果を取得保存する処理をPythonで記述します。
結果を取得することで、そのデータを基にさまざま加工することができます。加工できればこちらのもの。機械学習で予測モデルを作ってみたりも出来ますし、グラフなどに可視化して傾向など自分なりに分析することもできますね。
いろんな用途があると思いますので、まずはその前段階として、スクレイピングでの自動でのデータ取得を目指します。
実行環境
動作確認できている実行環境は以下の通りです。
- ドライブマウント済みGoogle Colaboratory
スクリプト
import csv
from urllib.request import urlopen
from bs4 import BeautifulSoup
import ssl
import os
import numpy as np
import time
ssl._create_default_https_context = ssl._create_unverified_context
# URLの指定
year_list = ["2022", "2021", "2020", "2019", "2018", "2017", "2016", "2015",
"2014", "2013", "2012", "2011", "2010", "2009", "2008", "2007",
"2006", "2005", "2004", "2003", "2002", "2001", "2000", "1999",
"1998","1997","1996","1995","1994","1993"]
dir = '/content/drive/MyDrive/{保存したいフォルダ}'
if not os.path.exists(dir):
os.makedirs(dir)
for year in year_list:
time.sleep(5)
html = urlopen(f"https://data.j-league.or.jp/SFMS01/search?competition_years={year}&tv_relay_station_name=")
bsObj = BeautifulSoup(html, "html.parser")
# テーブルを指定
table = bsObj.findAll("table", {"class":"table-base00 search-table"})[0]
rows = table.findAll("tr")
with open(f"/content/drive/MyDrive/{保存したいフォルダ}/{year}_results.csv", "w", encoding='utf-8') as file:
writer = csv.writer(file)
for row in rows:
csvRow = []
for cell in row.findAll(['td', 'th']):
csvRow.append(cell.get_text())
writer.writerow(csvRow)
補足
以下のリンクからJリーグの公式ページを訪れると、試合の結果を取得することができます。検索して表示される結果のページURLはある程度規則性があるので、これを利用します。ドライブのマウントが済んでいるGoogle Colaboなど上記スクリプトをそのまま実行することができます。(はずです。)
J. League Data Site
ちなみにこのデータは、totoを機械学習で当てるために取得しているため、出場選手など試合前までには分からない試合に重要な要素が入っていませんので悪しからず。
最終的には、このような感じでデータの収集→加工→予測、時々データ分析、という感じで更新していきたいと思っています。
まとめ
Pythonのスクレイピング、それもBeautifulSoupを使用して、Jリーグの試合結果の取得について書きました。
かなり簡単だと思いますし、Google Colabでドライブをマウントしておけば、すぐにcsvで保存してそれを取り出して加工なんてこともできますね。Google Colabはこういうライトな分析とかで本当に最強だと思います。特に初学者には持ってこいの環境ですね。
データサイエンティストの書評ブログ
趣味が読書くらいしかない駆け出しデータサイエンティストの書評ブログです。日々の勉強のアウトプットや趣味の読書のおすすめをしていきます。
コメント