Python

【楽天ゴルフ】全コースから初心者コースを抽出してみた

はじめに

本記事では、Python初心者が楽天ゴルフの初心者コースをスプレッドシート上に抽出までをご紹介します。

本記事の背景としては、最近、ゴルフを始めたのですが、いざラウンドに出ようと思い、ゴルフ場を探してみた時にどのゴルフ場が初心者向けなのかわからず結構迷っちゃいました。

そんな時にちょうどスクレイピングの練習をしていたので、練習台として初心者コースの抽出をしてみようと思った次第です!笑

抽出対象イメージ

動作検証環境

今回の動作検証環境は以下の通りです。

作業エディタ:VSCode
OS:MacOS 12.0.1
Pythonバージョン:Python3.9.5

Pythonの開発環境が整っていない方はこちら

python開発環境をインストールする
【2021年版】Python開発環境をインストールする【2021年版】Python開発環境をインストールする 本記事では、Pythonの開発環境をMac環境にインストールする方法を説明して...

スプレッドシートにデータを出力するまでの手順

今回は、過去の記事の総集編という形でスプレッドシートに初心者おすすめコースを抽出するまでを説明していきます。

  1. 対象地域のゴルフ場一覧画面からゴルフ場詳細ページのURLを取得
  2. スプレッドシートに出力
  3. URLから詳細情報取得し、スプレッドシートに出力

対象地域のゴルフ場一覧画面から
ゴルフ場詳細ページのURLを取得

少し長いので本記事では割愛。
以下、記事にて取得方法をまとめています。

ゴルフ一覧画面から必要情報をCSVデータ化

webサイトの情報をCSV化してみた
Seleniumで取得した値をCSVデータ化してみたはじめに 本記事では、Python初心者がSeleniumで画面から取得したデータをCSVデータにするまでを事例をもとにご紹介いたしま...

スプレッドシートに出力

同じく、本記事では割愛。
以下、記事にて出力方法をまとめています。

CSVデータをスプレッドシートに出力

【Python】CSVデータをスプレッドシートに移してみたはじめに 本記事では、Pythonを用いてCSVデータをスプレッドシートに移す方法をご紹介いたします。 別記事でSeleniumを利...

スプレッドシート上のURLから詳細情報取得し、スプレッドシートに出力

本記事のメインはここからです!
前記事の応用として、スプレッドシート上のデータを活用して、Seleniumで実行していきます。

スプレッドシート上のデータを取得

まずは、スプレッドシート上に出力してあるURL列(3列目)を取得していきましょう。

スプレッドシート3列目

col_values(X) を利用することで任意の列を一括で取得することができます。

サンプルコード
# 接続設定
json_file = 'my-project-golf-326514-c441df47b308.json'
file_name = 'python spreadsheets golf'
sheet_name1 = 'golf_list'
scope = ['https://spreadsheets.google.com/feeds',
        'https://www.googleapis.com/auth/drive']

# スプレッドシートにアクセス
credentials = ServiceAccountCredentials.from_json_keyfile_name(json_file, scope)
gc = gspread.authorize(credentials)
sh = gc.open(file_name)

# シートの選択
ws = sh.worksheet(sheet_name1)

# 3列目をリストで取得
url_list = ws.col_values(3)

ページにアクセスして情報を取得

今回は、以下項目を取得していきます。

  • ゴルフ場名
  • 評価数値
  • 初心者向けパーセント
  • 中級者向けパーセント
  • 上級者向けパーセント
  • 女性向けパーセント

※今回取得したかった値がサイトにアクセスしないと取れないデータだったためブラウザにアクセスする方法で取得するようにしています。

画面からの取得対象
サンプルコード
#soupだと取れない値があるためブラウザ起動
driver = webdriver.Chrome(ChromeDriverManager().install())

#出力用:1行目のヘッダー作成
detail_list = [heater]
for i in range(1, len(url_list)) :
    # 詳細ページにアクセス
    res = driver.get(url_list[i])

    #
    ゴルフツールgolf_station_name = WebDriverWait (ドライバー、 30 )。まで( EC 。 visibility_of_element_located ((によって。 ID 、 'goraHeadInfoName2' ))) 
    golf_station_result = WebDriverWait (ドライバ、30 )。まで( EC 。 visibility_of_element_located ((すること。 XPATH 、  '/ html / body / div [4] / div [2] / div [1] / div [1] / div [1] / div [2] / h2' ))) 
    golf_station_beginner = WebDriverWait ( driver 、 30 )。まで( EC 。 visibility_of_element_located ((によって。 ID 、 'recommend_type4' ))) 
    golf_station_medium = WebDriverWait (ドライバ、30 )。まで( EC 。 visibility_of_element_located ((では 。ID 、 'recommend_type6' ))) 
    golf_station_senior = WebDriverWait ( driver 、 30 )。まで( EC 。 visibility_of_element_located ((によって。 ID 、 'recommend_type3' ))) 
    golf_station_woman = WebDriverWait (ドライバ、30 )。まで( EC 。 visibility_of_element_located ((では 。ID 、 'recommend_type1' ))))

    # スプレッドシートに出力用の配列に格納
    detail = [url_list[i],
        golf_station_name.text,
        golf_station_result.text,
        golf_station_beginner.text,
        golf_station_medium.text,
        golf_station_senior.text,
        golf_station_woman.text]
    detail_list.append(detail)

ドライバー。終了()

スプレッドシートに出力

ここまでくれば、画面上から情報を取得できているため、あとは出力するだけです。

#データをシートに出力
WS = SH 。ワークシート( sheet_name2 ) 
sh 。values_clear ( F : "H500 {sheet_name2} A1!" )
のためのdetail_dataでdetail_list : 
    WS 。append_row ( detail_data )

完成物

参考サイト

まとめ

本記事では、楽天ゴルフの初心者コースをスプレッドシート上に抽出までをご紹介しました。いままでの応用回でしたが、だいぶ個人的な事案になってしまったので備忘録的な形になってしまいましたね。。。

ABOUT ME
lusk
EC歴6年、26歳。 通販カート会社に2018年新卒で入社し、エンジニア、プロジェクトマネージャー、新規事業の立ち上げを経験。EC事業会社に転職し、データ活用を推進。 仕事を楽しくするためのツール作成や業務改善の仕組みを作ったりしてます。