2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonでプロ野球データを年度別にクローリングしCSVに保存してみよう

Last updated at Posted at 2023-12-25

はじめに

この記事では、Pythonを使用してプロ野球選手の打率データを年度別にウェブからクローリングし、CSVファイルに保存する方法を詳しく解説します。データ収集から分析までの一連のステップを学び、データ活用の基盤を築きましょう。

必要なライブラリ

このプロジェクトを実行するために必要なPythonライブラリは次の通りです。必要なライブラリがインストールされていることを確認しましょう。

-requests: ウェブページからデータを取得するためのライブラリ。
-BeautifulSoup: HTMLデータを解析するためのライブラリ。
-pandas: データの整理とCSVファイルへの保存に使用するライブラリ。

コードの概要

このプロジェクトのコードは、以下の手順で実行されます。

  1. 年度ごとにデータをクローリングし、ウェブページから取得します。
  2. HTMLデータを解析してテーブルデータを抽出します。
  3. データを整理し、年度ごとにCSVファイルに保存します。

年度別にデータをクローリング

コード説明
年度ごとにデータをクローリングするために、forループを使用します。指定した年度から過去に遡りながらデータを収集し、CSVファイルに保存します。

python
import requests
from bs4 import BeautifulSoup
import pandas as pd

# 開始年度と終了年度(過去から遡る)
start_year = 2023
end_year = 2009

for year in range(start_year, end_year - 1, -1):
    file_path = f'pro_baseball_data_{year}.csv'
    if year == start_year:
        url = 'https://baseball-data.com///stats/hitter-all/avg-1.html'
    else:
        formatted_year = year - 2000  # 年度の形式に変換(例: 2023 -> 23)
        url = f'https://baseball-data.com/{formatted_year:02d}/stats/hitter-all/avg-1.html'
    
    response = requests.get(url, headers={"User-Agent": "Mozilla/5.0"})
    
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        table = soup.find('table')
        rows = table.find_all('tr')
        data = []

        for row in rows[1:]:
            cols = row.find_all(['td', 'th'])
            row_data = [col.get_text(strip=True) for col in cols]
            data.append(row_data)

        columns = [col.get_text(strip=True) for col in rows[0].find_all(['th', 'td'])]
        df = pd.DataFrame(data, columns=columns)
        df.drop(df.index[-1], inplace=True)

        df.to_csv(file_path, index=False)
    else:
        print(f"Failed to retrieve the page for year {year}. Status code: {response.status_code}")

ループの詳細説明

  1. start_yearend_yearで取得したいデータの範囲を指定します。
  2. forループで年度ごとにデータを取得します。年度ごとのデータはCSVファイルに保存されます。
  3. file_pathでCSVファイルの保存先を指定します。
  4. urlでデータを取得するウェブページのURLを構築します。
  5. requests.get()でウェブページからデータを取得します。
  6. ウェブページから取得したデータを解析し、必要な情報を抽出します。
  7. データを整理してpandasDataFrameに格納します。
  8. DataFrameをCSVファイルに保存します。

注意点

  1. クローリングを行う際は、対象ウェブサイトの利用規約を遵守してください。
  2. ウェブサイトの構造が変わると、コードの調整が必要になる可能性があります。

まとめ

Pythonを使ってプロ野球のデータをクローリングし、年度別にCSVファイルに保存する方法を学びました。これにより、データ分析や研究のための基盤が整いました。データ収集の基本をマスターし、さまざまなプロジェクトで活用しましょう。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?