import time
from pandas.core.frame import DataFrame                                 
from selenium import webdriver             
import chromedriver_binary 
from googleapiclient.discovery import build
import pandas as pd
import os

#作成したcsvファイルを入れる用のディレクトリの作成
path = './Kyouzai'
os.makedirs(path, exist_ok=True)

sub_title = pd.read_csv("IoTシステムデザイン.csv",encoding="cp932",header=None)
#1列目のものをsub_listに追加する（授業タイトル）
sub_list = sub_title.iloc[:,0]


url_num = 20#一つの単語につき何個のwebページを出すか

#HPのタイトルとURL用のリストを15個作成する
hp_title = [[] for _ in range(len(sub_list))]
hp_url = [[] for _ in range(len(sub_list))]


####################### webページを検索 #######################
for j in range(len(sub_list)):
    driver = webdriver.Chrome()                  #Chromeのパスを指定する
    driver.get("https://www.google.com/")        #Chromeの検索画面を取得する
    
    search_box = driver.find_element_by_name('q')    # HTML内で検索ボックス(name='q')を指定する
    search_box.send_keys(str(sub_list[j])+" "+"解説")            # 検索ボックスに検索ワードを送信する
    #print(sub_list[j])
    search_box.submit()                              # 検索を実行する
    time.sleep(10)                                    # 5秒間待機する
    
    def ranking(driver):
        i = 1 #ループ番号，ページ番号を定義する
        i_max = 3 #何ページまで検索するかを定義
        title_list = [] #タイトル用のリストを作成
        link_list = []  #URL用のリストを作成
        title_kouho = []
        link_kouho = []
        
        #現在のページが指定した最大分析ページを超えるまでループする（j_max）
        while i <= i_max:
            #タイトルとリンクはclass="yuRUbf"に格納されている
            class_group = driver.find_elements_by_class_name('yuRUbf')
            
            # class="yuRUbf" からタイトルとリンクを抽出し，リストに追加するループ
            for elem in class_group:
                #タイトルは class="LC201b" に格納されている
                #タイトルは class = h3 に格納されている
                title = elem.find_element_by_tag_name('h3').text
                #リンクは aタグの href に格納されている
                link = elem.find_element_by_tag_name('a').get_attribute('href')
                
                if '動画' not in title and '画像' not in title and '説明' not in title:
                    # link に通販サイトのやつらを入らないようにする（アマゾンとか）← 今後追加していく
                    if 'youtube' not in link and 'yodobashi' not in link and 'amazon' not in link:
                        if title != '':
                            #print(link)
                            title_list.append(title)
                            link_list.append(link)
                
             #「次へ」のボタンはひとつしかないがあえてelementsで複数検索. 空のリストであれば最終ページという意味.
            if driver.find_elements_by_id("pnnext") == []:
                i = i_max + 1   # 次のページがなければ,最大ページ数を強制的に越してループ終了
            else:
                # 次ページのURLはid="pnnext"のhref属性
                next_page = driver.find_element_by_id("pnnext").get_attribute("href")
                #  次ページへ遷移する
                driver.get(next_page)
                i = i + 1       # ページを進む
                time.sleep(3)   # 3秒休憩, これを指定の最大ページ数まで繰り返す
        return title_list, link_list 

    #上記で定義したranking()関数を実行する
    title, link = ranking(driver)
    #print(title)
    
    print(len(title))
    for i in range(url_num):
        hp_title[j].append(title[i])
        hp_url[j].append(link[i])

    #print(hp_url[j])

    driver.quit()

    #print(hp_title[j])

#cledibility_score

for j in range(len(sub_list)):
    df = pd.DataFrame({'HPtitle':hp_title[j],'HPurl':hp_url[j]})
    df.to_csv(f'./Kyouzai/kyouzai_{j}.csv',index=None,encoding='utf-8-sig')