beautifulsoupを使ってJリーグの順位表をcsvファイルに出力
最終目標
最終的には機械学習を使って勝敗予想をするものを作りたいと思っています。今回行うこと
Jリーグの公式サイトにある過去の順位のデータを取得します。importするモジュールたち
``` #WEB上のデータ(HTML)にアクセスするために使用 import urllib #HTMLからデータを抽出するために使用 from bs4 import BeautifulSoup #表形式でデータ格納するために使用 import pandas as pd ```beautifulsoupのインスタンスを生成
``` url = 'https://data.j-league.or.jp/SFRT01/?competitionSectionIdLabel=%E7%AC%AC%EF%BC%91%E7%AF%80&competitionIdLabel=%E6%98%8E%E6%B2%BB%E5%AE%89%E7%94%B0%E7%94%9F%E5%91%BD%EF%BC%AA%EF%BC%91%E3%83%AA%E3%83%BC%E3%82%B0&yearIdLabel=2019%E5%B9%B4&yearId=2019&competitionId=460&competitionSectionId=1&search=search' html = urllib.request.urlopen(url) soup = BeautifulSoup(html, 'html.parser')今回取得するのは2019年第一節のデータです。
Beautifulsoupのインスタンスはそのページのhtmlが入っています
<h2>ファイル名を決める</h2>
#ファイル名の取得
h3 = soup.find_all('h3', class_='standings-title')[0]
filename = h3.get_text().strip() + '.csv'
<h2>データの取得</h2>
#データ格納用
headData = []
teamData = []
for i, row in enumerate(rows):
#一行目
if i == 0:
for headerValue in row.find_all('th'):
headData.append(headerValue.get_text())
#最初と最後から三つを削除
del headData[0]
del headData[-4:]
elif(i > 0) and (i < len(rows)):
#明細部取得
teamrow = []
for teamValue in row.find_all('td'):
text = teamValue.get_text()
teamrow.append(text.strip())#\nや\rを削除
#最初と最後から三つを削除
del teamrow[0]
del teamrow[-4:]
teamData.append(teamrow)
文字列データのstrip()メソッドは\nとか空白とかを削除してくれます
<h2>csvファイルに出力</h2>
#表にする
df = pd.DataFrame(data = teamData, columns = headData)
df.to_csv(filename, sep = ',', header = True, index = False, encoding='utf_8_sig') #ファイルに出力
encodingを指定しないと文字化けするので注意してください
<h2>終わりに</h2>
初めてquitaの記事を書いたので難しかったです(笑)
これからも自分のoutputを書いていくので参考になれば幸いです