見出し画像

Pythonでスクレイピング学習-その2-データ自動抽出

前回に引き続き、いまにゅさん(@03Imanyu)がYouTubeに投稿されている動画での学習です。今回の動画は、「【PythonによるWebスクレイピング入門】vol.02:Webページ内のテキストデータを自動で抽出(Selenium)」です。いよいよデータの抽出に入りました。

【学習環境】
OS:Windows 10 HOME
エディタ:Spider(Python 3.7)
使用ライブラリ:Selenium

【学習したこと】

・複数のタグ要素を配列に格納する方法
・pandasの利用
・CSVファイルに出力する方法

【コーディングの全容】

それぞれのことについて書く前に、この学習が終った段階でのコーディングしたプログラムの全容を載せます。前回の続きなので、前回分のものも記載されています。

from selenium import webdriver
from time import sleep

#pandasをインポート:データを効率的に解析するライブラリ
import pandas as pd

#WindowsのChrome起動
browser = webdriver.Chrome('chromedriver.exe')

#browser.get():特定のブラウザを開く
url = 'https://scraping-for-beginner.herokuapp.com/login_page'
browser.get(url)

#.find_element_by_id():要素をID指定で見つける
element_username = browser.find_element_by_id('username')
element_password = browser.find_element_by_id('password')
element_login_btn = browser.find_element_by_id('login-btn')

#.send_keys():キーの送信
element_username.send_keys('imanishi')
element_password.send_keys('kohei')

#.click():指定場所をクリックする
element_login_btn.click()

#Keys配列に、thタグの要素を格納
elems_th = browser.find_elements_by_tag_name('th')
keys = []
for elem_th in elems_th:
   key = elem_th.text
   keys.append(key)
       
#Values配列に、tdタグの要素を格納
elems_td = browser.find_elements_by_tag_name('td')
values = []
for elem_td in elems_td:
   value = elem_td.text
   values.append(value)

#CSVファイルに出力
df = pd.DataFrame()
df['項目'] = keys
df['値'] = values
print(df)
df.to_csv('情報.csv', index = False, encoding = 'utf_8_sig')

#sleep():待ち時間
sleep(3)

#.quit():ブラウザを閉じる
browser.quit()

【複数のタグ要素を配列に格納する方法】

今回、はじめにWebサイトにあるタグ要素を見つけ、その要素を配列に格納していきました。タグで要素を探すときは、find_elements_tag_name('欲しい要素のタグ名') とすると、取得できます。注意点として、複数要素欲しいときは、必ず「elements」といったように「s」をつけなければなりません。忘れそう…
また、要素を配列に格納するときには、append() とすると、配列の末尾に格納してくれます。

#Keys配列に、thタグの要素を格納
elems_th = browser.find_elements_by_tag_name('th')
keys = []
for elem_th in elems_th:
   key = elem_th.text
   keys.append(key)
       
#Values配列に、tdタグの要素を格納
elems_td = browser.find_elements_by_tag_name('td')
values = []
for elem_td in elems_td:
   value = elem_td.text
   values.append(value)【

【pandasの利用】

次に、出力する際に必要になる「Pandas」についてです。簡単に言うと、データを効率よく解析してくれるライブラリの1つです。これは必ずインポートしておきましょう。


#pandasをインポート:データを効率的に解析するライブラリ
import pandas as pd

【CSVファイルに出力する方法】

そしていよいよ、CSVファイルへの出力です。まず、からのデータファイルを作成します。作成するときは、pd.DataFrame() として、変数に代入します。これは、先ほどのPandasを利用しています。

取得した要素のテキストが入っている配列は、変数名['項目名'] = 要素が入っているテキストの配列 として、代入しておきます。

最後に、to_scv('ファイル名.csv') とすると、作業しているディレクトリ内にCSVファイルが作成されます。

画像1

こんな感じです。ですが、私の場合、はじめは文字化けしていました。
その対処方法として、先ほどのto_csv() の中に、「encoding = 'utf_8_sig'」と入れることで、文字化けがなく正常に出力されましたので参考程度に…!

#CSVファイルに出力
df = pd.DataFrame()
df['項目'] = keys
df['値'] = values
print(df)
df.to_csv('情報.csv', index = False, encoding = 'utf_8_sig')

【まとめ】

今回ついにCSVファイルに出力するところまできました。これでスクレイピングのおおよその行い方について学習することができたのではないかと思います。まだまだ奥が深そうなので、引き続き学習に励みます。


この記事が気に入ったらサポートをしてみませんか?