#author("2024-02-29T01:10:14+00:00","","") #author("2025-02-26T03:20:08+01:00","","") [[由利恵]] #清水さん,滝沢さん,中市さん *目次 [#q6f8e430] #CONTENTS *スクレイピング用準備 [#o2ab7bca] **Mecab [#t59de1a2] 必要なモジュールをインストールする必要がある~ ・mecab~ 言語を分析するモジュール~ ・unidic-lite~ 日本語の辞書~ ・mecab(exe)~ 3つ目以外は~ pip install mecab と入れる~ mecab(exe)は[[Mecabダウンロード:https://github.com/ikegami-yukino/mecab/releases/tag/v0.996]]のexeファイルをダウンロード~ ダウンロードしたものは~ C:\Program Files に収納されているはず~ また、新規でMecab.exeがあるパスを追加する。~ C:\Program Files\MeCab\bin\ #ref(n21.png,,30%) **NEologd [#d5eee5c5] Mecabには古い辞書しか入っていないため、NEologdというものを入れる必要がある~ #ref(NEologd.zip) #ref(neologd.zip) ↑をダウンロードして解凍する neologdの中身のmecab-ipadic-neologdを~ C:\Program Files\MeCab\dic~ にコピーをする~ ・ipadic(もとからある) ・mecab-ipadic-neologd(コピーしてきた) もののほかに~ ①ipadic-UTF-8~ ipadicの中身をすべてコピーした物~ ②neologd~ 中身は空~ のフォルダを作成する~ **実際に行ってみる [#hfce4950] コマンドプロンプトで~ mecab と入力→対話型シェルに入る~ 形態素解析 と入力→Enterを押すと下記の画像のようになる~ #ref(n26.png,,70%) ***文字化けした場合 [#d1c7c720] chcp 65001 をコマンドプロンプトに入力した後実行してみる~ *Jupyter [#gd52a58c] **pythonからJupyterインストール [#z26b958f] コマンドプロントから~ ①pythonのバージョン確認~ python -V ②Jupyterをインストール~ pip install jupyter environment_kernels~ ③新規でpip.exeがあるパスを追加する(もう追加されていたら飛ばす)~ pip.exeのあるフォルダを探す~ C:\Users\tc22m064\AppData\Local\Programs\Python\Python39\Scripts\ #ref(n21.png,,30%)~ ④Jupyterを起動~ jupyter-notebook #ref(n22.png,,30%)~ **実際に行ってみる [#wef83fdc] pythonでmecabを試す~ import sys import MeCab m = MeCab.Tagger ("-Ochasen") print(m.parse ("東京特許許可局")) 上の4行を先ほど立ち上げたjupyterで実行する~ #ref(n23.png,,30%) #ref(n24.png,,30%) #ref(n25.png,,40%) *教育支援・教材提示 [#kcf669ec] **初めに[#h8e98998] #ref(軽量化三.7z) ファイルを開き、app.pyを実行させる~ その際に必要となるモジュールを順次入れる~ もし、[[MeCab:https://github.com/ikegami-yukino/mecab/releases/tag/v0.996]]というものが入っていなければ、インストールさせる~ 今回入れたのは mecab-0.996-64.exe を入れ、もう1度app.pyを実行させる~ #ref(n1.png,,50%) が出てきたら #ref(n2.png,,50%) をコピペしてGoogleなどに貼り付けて検索をかける~ **新規登録・ログイン [#r89f7c64] まず、新規登録を行った #ref(n3.png,,50%) 今回は~ 新しいユーザー名:123~ 新しいパスワード:1234~ 名前:123~ として登録を行った~ 登録されたユーザーは軽量化三フォルダの中のusers.csvの中に記入されている #ref(n6.png,,50%) **ログイン後[#xb8acee7] ログイン後以下のような画面に切り替わる~ #ref(n4.png,,30%) #ref(n5.png,,30%) **週間勉強予定時間 [#k0987feb] 画像のように曜日・時間の部分をクリックすると緑に変わる~ 緑に変わったら右側にある「各曜日の合計時間」にも連携されている~ 合計時間を保存を押す~ #ref(n12.png,,30%) 下の画像のようなものが表示されたら更新されたことになる~ 「合計時間を保存」を1回押して表示されなければもう1度押してください #ref(n13.png,,50%) study.csvに保存されている~ #ref(n7.png,,50%) **カレンダー [#n4cd57e6] 以下の事を行う~ ①予定追加(本日よりも後ろの日付)~ ②名前変更(しなくてもよい)~ ③書き込み~ #ref(n8.png,,50%) ③を行ったら軽量化三のuserdataフォルダの中の123.csvに保存されている~ Titleが文字化けしちゃった場合はメモ帳で開くと見れます #ref(n9.png) **理解度チェック[#uaa8eeae] ・小学生理解度チェックへ~ ・中学生理解度チェックへ~ ・高校生理解度チェックへ~ のどれかを選択~ 今回は小学生理解度チェックを選択した。 #ref(n10.png,,30%) 各科目の単元ごとに分かれている。 ・未~ ・落単~ ・C~ ・B~ ・A~ ・S~ の6種類と、□(チェックボックス)がある~ テスト範囲の単元の場合は□(チェックボックス)をチェックする 小学生算数で実践してみる #ref(n11.png,,30%) 画面下部にある「更新する」を押すと一旦ログアウトになる~ subjectフォルダの中にある **スケジュール日程作成 [#d94856c8] カレンダーに書き込んだスケジュールの日程までに日割りで行う単元が記載されている~ #ref(n14.png,,30%) 単元を押すと教材ページに飛ぶようになっている~ #ref(n15.png,,40%) **系統図グラフ作成 [#g7eb1294] #ref(n16.png,,30%) プルダウンで理解度チェックを行ったものを選択する~ #ref(n17.png,,40%) ・★~ クリティカルパス~ (プロジェクトを進めていくうえでスケジュールに影響が出る作業経路)~ ・大きい●~ テスト範囲~ ・●~ 単元~ の3種類がある~ #ref(n18.png,,30%) ★や●などの単元を押すと~ #ref(n15.png,,40%) 教材ページに飛べる~ **教材ページ [#k0383722] #ref(n19.png,,30%)~ #ref(n20.png,,50%) ①評価スコア~ ②レビュー本文~ ③評価ボタン~ を行うことにより信頼性スコアが変わる~ **プログラム [#l866fe49] 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) # ChromeDriverのパスを新しいものに更新 chromedriver_path = 'C:/Users/tc22m064/Desktop/引継ぎ/(中市さん)/課題①/スクレイピング/chromedriver.exe' driver = webdriver.Chrome(executable_path=chromedriver_path) # Chromeのパスを指定する # utf-8-sigエンコーディングを指定してCSVファイルを読み込む sub_title = pd.read_csv("KeyWord.csv", encoding="utf-8-sig", header=None) # 1列目のものをsub_listに追加する(授業タイトル) sub_list = sub_title.iloc[:, 0] url_num = 10 # 一つの単語につき何個の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') print('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(min(url_num, len(title))): 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/website_{j}.csv',index=None,encoding='utf-8-sig') が実行で通るように編集中