由利恵? #清水さん,滝沢さん,中市さん

目次 

スクレイピング用準備 

Mecab 

必要なモジュールをインストールする必要がある

・mecab
  言語を分析するモジュール
・unidic-lite
  日本語の辞書
・mecab(exe)

3つ目以外は

pip install mecab

と入れる

mecab(exe)はMecabダウンロードのexeファイルをダウンロード

ダウンロードしたものは

C:\Program Files

に収納されているはず

また、新規でMecab.exeがあるパスを追加する。

C:\Program Files\MeCab\bin\
n21.png

NEologd 

Mecabには古い辞書しか入っていないため、NEologdというものを入れる必要がある

#ref(): File not found: "NEologd.zip" at page "教育支援・教材提示"

↑をダウンロードして解凍する

neologdの中身のmecab-ipadic-neologdを

C:\Program Files\MeCab\dic~

にコピーをする

・ipadic(もとからある) ・mecab-ipadic-neologd(コピーしてきた)

もののほかに

①ipadic-UTF-8
  ipadicの中身をすべてコピーした物
②neologd
  中身は空

のフォルダを作成する

実際に行ってみる 

コマンドプロンプトで

mecab

と入力→対話型シェルに入る

形態素解析

と入力→Enterを押すと下記の画像のようになる

n26.png

文字化けした場合 

chcp 65001

をコマンドプロンプトに入力した後実行してみる

Jupyter 

pythonからJupyterインストール 

コマンドプロントから
①pythonのバージョン確認

python -V

②Jupyterをインストール

pip install jupyter environment_kernels~

③新規でpip.exeがあるパスを追加する(もう追加されていたら飛ばす)
pip.exeのあるフォルダを探す

C:\Users\tc22m064\AppData\Local\Programs\Python\Python39\Scripts\
n21.png

④Jupyterを起動

jupyter-notebook
n22.png

実際に行ってみる 

pythonでmecabを試す

import sys
import MeCab
m = MeCab.Tagger ("-Ochasen")
print(m.parse ("東京特許許可局"))

上の4行を先ほど立ち上げたjupyterで実行する

n23.png
n24.png
n25.png

教育支援・教材提示 

初めに 

ファイルを開き、app.pyを実行させる
その際に必要となるモジュールを順次入れる

もし、MeCabというものが入っていなければ、インストールさせる

今回入れたのは

mecab-0.996-64.exe

を入れ、もう1度app.pyを実行させる

n1.png

が出てきたら

n2.png

をコピペしてGoogleなどに貼り付けて検索をかける

新規登録・ログイン 

まず、新規登録を行った

n3.png

今回は

新しいユーザー名:123
新しいパスワード:1234
名前:123

として登録を行った

登録されたユーザーは軽量化三フォルダの中のusers.csvの中に記入されている

n6.png

ログイン後 

ログイン後以下のような画面に切り替わる

n4.png
n5.png

週間勉強予定時間 

画像のように曜日・時間の部分をクリックすると緑に変わる

緑に変わったら右側にある「各曜日の合計時間」にも連携されている

合計時間を保存を押す

n12.png

下の画像のようなものが表示されたら更新されたことになる
「合計時間を保存」を1回押して表示されなければもう1度押してください

n13.png

study.csvに保存されている

n7.png

カレンダー 

以下の事を行う

①予定追加(本日よりも後ろの日付)
②名前変更(しなくてもよい)
③書き込み

n8.png

③を行ったら軽量化三のuserdataフォルダの中の123.csvに保存されている
Titleが文字化けしちゃった場合はメモ帳で開くと見れます

n9.png

理解度チェック 

・小学生理解度チェックへ
・中学生理解度チェックへ
・高校生理解度チェックへ
のどれかを選択

今回は小学生理解度チェックを選択した。

n10.png

各科目の単元ごとに分かれている。

・未
・落単
・C
・B
・A
・S

の6種類と、□(チェックボックス)がある
テスト範囲の単元の場合は□(チェックボックス)をチェックする

小学生算数で実践してみる

n11.png

画面下部にある「更新する」を押すと一旦ログアウトになる

subjectフォルダの中にある

スケジュール日程作成 

カレンダーに書き込んだスケジュールの日程までに日割りで行う単元が記載されている

n14.png

単元を押すと教材ページに飛ぶようになっている

n15.png

系統図グラフ作成 

n16.png

プルダウンで理解度チェックを行ったものを選択する

n17.png

・★
  クリティカルパス
  (プロジェクトを進めていくうえでスケジュールに影響が出る作業経路)
・大きい●
  テスト範囲
・●
  単元

の3種類がある

n18.png

★や●などの単元を押すと

n15.png

教材ページに飛べる

教材ページ 

n19.png
n20.png

①評価スコア
②レビュー本文
③評価ボタン

を行うことにより信頼性スコアが変わる

プログラム 

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')
が実行で通るように編集中

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS