Python

Seleniumで取得した値をCSVデータ化してみた

はじめに

本記事では、Python初心者がSeleniumで画面から取得したデータをCSVデータにするまでを事例をもとにご紹介いたします。

今回データ化するのは、楽天GOLFサイトからゴルフ場の情報を利用したいと思います。
※このデータを活用したいのでめちゃくちゃ私用で申し訳ないですが…笑

楽天ゴルフTOPページ

動作検証環境

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

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

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

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

CSVデータにするまでの手順

では、下記の3つの手順で説明していきます。

  1. サイトの要素確認
  2. データ取得
  3. CSV化

サイトの要素確認

まずは、サイトからどの項目を取得するか決めましょう。

今回は以下3つの項目を取ることとします。

1.ゴルフ場の都道府県
2.レビュー数
3.ゴルフ場の詳細ページURL

実際の画面イメージだと以下の赤枠部分から値を取得するイメージです。

ターゲット要素

要素からデータを取得する

以下、Class名をもとに値を取得していきます。

1.ゴルフ場の都道府県    :pref
2.レビュー数        :review-count
3.ゴルフ場の詳細ページURL :review-count ※hrefの値を取得

サンプルコード

elem_golf_course_list = WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, 'itemList-main-head')))
if elem_golf_course_list :
    for elem_golf_course in elem_golf_course_list :
        elem_golf_course_city_name = elem_golf_course.find_element_by_class_name("pref")
        elem_golf_course_review_count = elem_golf_course.find_element_by_class_name("review-count")
        elem_golf_course_url = elem_golf_course.find_element_by_class_name("review-count").get_attribute("href")
    sleep(5)

取得した値をCSVデータ化する

作成するCSVファイル名を指定して、そのCSVファイルデータをインプットしていきます。

ファイル名:golf.csv
ヘッダー :’city’, ‘review_count’, ‘url’

サンプルコード

# ヘッダー定義
HEADER = ['city', 'review_count', 'url'] 

with open('golf.csv', 'w', encoding='utf-8') as f:
    print("CSV-OPEN")
    writer = csv.writer(f)
    writer.writerow(HEADER)
    elem_golf_course_count = WebDriverWait(driver, 30).until(EC.visibility_of_element_located((By.CLASS_NAME, 'course__count')))
    repeat_count = int(int(elem_golf_course_count.text) / 20)
    for index in range(repeat_count) :
        elem_golf_course_list = WebDriverWait(driver, 30).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, 'itemList-main-head')))
        if elem_golf_course_list :
            for elem_golf_course in elem_golf_course_list :
                elem_golf_course_city_name = elem_golf_course.find_element_by_class_name("pref")
                elem_golf_course_review_count = elem_golf_course.find_element_by_class_name("review-count")
                elem_golf_course_url = elem_golf_course.find_element_by_class_name("review-count").get_attribute("href")

                # CSVに書き込み
                row = [elem_golf_course_city_name.text, elem_golf_course_review_count.text, elem_golf_course_url]
                writer.writerow(row)
            sleep(5)
        else :
            print('ページが存在ない。もしくは、ページングが終了しました。')

        # ページング更新
        next_url = 'https://gora.golf.rakuten.co.jp/search/result/golf/?search_c_name=&year='+ NOW_YEAR + '&month='+ NOW_MONTH +'&day='+ NOW_DAY +'&widthday=1&play_fee_min=0&play_fee_max=0&area_flg=0&search_mode=normal&l-id=search_btn_search&area%5B%5D=108&area%5B%5D=40&area%5B%5D=41&area%5B%5D=42&area%5B%5D=43&area%5B%5D=44&area%5B%5D=45&area%5B%5D=46&area%5B%5D=47&order=rsv&page='+ (str(index + 2)) +'&continue_stock=0&highway=&distance=0&srch_keyword=&c_cd=0'
        driver.get(next_url)

    # ブラウザ閉じる
    driver.quit()
print("CSV-CLOSE")

動作確認

実行後のCSVデータを確認してみましょう。
想定通りの値が格納できれいればOKです!

CSVデータ確認

参考サイト

まとめ

本記事では、Python初心者がSeleniumで画面から取得したデータをCSVデータにするまでを実際のサイトを用いた事例をもとにご紹介しました。
少しでも参考になっていれば幸いです。

個人的な話になりますが、欲しいデータはまだ取れていないので、続きをまた記事にします!

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