はじめに
本記事では、Python初心者がSeleniumで画面から取得したデータをCSVデータにするまでを事例をもとにご紹介いたします。
今回データ化するのは、楽天GOLFサイトからゴルフ場の情報を利用したいと思います。
※このデータを活用したいのでめちゃくちゃ私用で申し訳ないですが…笑
動作検証環境
今回の動作検証環境は以下の通りです。
作業エディタ:VSCode
OS:MacOS 11.5
Pythonバージョン:Python3.9.5
Pythonの開発環境が整っていない方はこちら

CSVデータにするまでの手順
では、下記の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です!

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