import csv
import time
import re
from bs4 import BeautifulSoup
from selenium.webdriver import Chrome, ChromeOptions
import chromedriver_binary

def input_int(output):
    try:
        return int(input(output))
    except:
        print("数列を入力してください")
        return input_int(output)


if __name__ == "__main__":
    date = input("レースが行われる日付を入力してください：")
    race_id = input_int("レースIDの上10桁を入力してください：")
    race_sum = input_int("何レースまで開催されたか入力してください：")

    # ドライバのセットアップ
    options = ChromeOptions()
    # options.add_argument('--headless')
    driver = Chrome(options=options)

    target_url = "https://race.netkeiba.com/race/shutuba.html?race_id={id}"

    race_info = []
    race_number = []
    race_date = []
    horse_sum = []
    race_name = []
    race_distance = []
    horse_number = []
    horse_name = []
    horse_age = []
    horse_jockey = []
    horse_weight = []
    horse_odds = []

    for i in range(1, race_sum + 1) :
        # HTML取得
        html = driver.get(target_url.format(id=str(race_id) + str(i).zfill(2)))
        time.sleep(1)
        html = driver.page_source.encode('utf-8')
        soup = BeautifulSoup(html, 'html.parser')

        # レース情報取得
        race_info_html = soup.select_one('div[class="RaceData02"]')
        race_info_tmp = race_info_html.text.splitlines()
        race_number_html = soup.select_one('span[class="RaceNum"]')
        race_number_tmp = race_number_html.text
        race_name_html = soup.select_one('div[class="RaceName"]')
        race_name_tmp = race_name_html.text.replace('\n','')
        race_distance_html = soup.select_one('div[class="RaceData01"]')
        race_distance_tmp = race_distance_html.text.split('/')

        # 余計なHTML破棄
        soup = soup.find(class_="RaceTableArea")

        # 馬番取得
        horse_number_html = soup.find_all("td",class_=re.compile("Umaban\d+ Txt_C"))
        for item in horse_number_html :
            race_info.append(race_info_tmp[1]+race_info_tmp[2]+race_info_tmp[3])
            race_number.append(race_number_tmp[:-1])
            race_date.append(date)
            horse_sum.append(race_info_tmp[9][:-1])
            race_name.append(race_name_tmp)
            race_distance_tmp[1] = race_distance_tmp[1].replace('\n','')
            race_distance.append(race_distance_tmp[1].replace(' ',''))
            horse_number.append(item.text)

        # 馬名取得
        horse_name_html = soup.select('span[class*="HorseName"]')
        for item in horse_name_html :
            if (item.text != "馬名"):
                horse_name.append(item.text)

        # 性齢取得
        horse_age_html = soup.find_all("td",class_=re.compile("Barei Txt_C"))
        for item in horse_age_html :
            tmp = item.text.replace('\n','')
            horse_age.append(tmp.replace('"',''))

        # 騎手取得
        horse_jockey_html = soup.select('td[class*="Jockey"]')
        for item in horse_jockey_html :
            horse_jockey.append(item.text.replace('\n',''))

        # 斤量取得
        horse_weight_html = soup.select('td[class="Txt_C"]')
        for item in horse_weight_html :
            horse_weight.append(item.text)

        # オッズ取得
        horse_odds_html = soup.select('td[class="Txt_R Popular"]')
        for item in horse_odds_html :
            horse_odds.append(item.text)

    driver.close()
    header = ["kaisai", "race_number", "race_date", "tousuu", "race_name", "race_distance", "horse_number", "horse_name", "sex_age", "jockey_name", "kinryo", "odds"]
    result = [race_info, race_number, race_date, horse_sum, race_name, race_distance, horse_number, horse_name, horse_age, horse_jockey, horse_weight, horse_odds]
    result = list(map(list, zip(*result)))

    with open(str(race_id)+'_shutsuba.csv', 'w', encoding='utf-8') as file:
        writer = csv.writer(file, lineterminator='\n')
        writer.writerow(header)
        writer.writerows(result)