テキストデータを自動抽出

演習

先程使用した以下のページにアクセスし、ログインするまでの流れを selenium を用いて実装してください。 https://scraping-for-beginner.herokuapp.com/login_page

解答は先ほどのコードを確認してください。

In [49]:
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://scraping-for-beginner.herokuapp.com/login_page')
In [50]:
elem_username = browser.find_element_by_id('username')
elem_username.send_keys('imanishi')
In [51]:
elem_password = browser.find_element_by_id('password')
elem_password.send_keys('kohei')
In [52]:
elem_login_btn = browser.find_element_by_id('login-btn')
elem_login_btn.click()

テキストデータの取得

講師名

In [53]:
elem = browser.find_element_by_id('name')
In [54]:
elem.text
Out[54]:
'今西 航平'
In [55]:
name = elem.text
type(name)
Out[55]:
str

所属企業

In [56]:
elem = browser.find_element_by_id('company')
elem.text
Out[56]:
'株式会社キカガク'

生年月日

In [57]:
elem = browser.find_element_by_id('birthday')
elem.text
Out[57]:
'1994年7月15日'

出身

In [58]:
elem = browser.find_element_by_id('come_from')
elem.text
Out[58]:
'千葉県'

趣味

In [59]:
elem = browser.find_element_by_id('hobby')
elem.text
Out[59]:
'バスケットボール\n読書\nガジェット集め'
In [60]:
hobby = elem.text
hobby
Out[60]:
'バスケットボール\n読書\nガジェット集め'
In [61]:
hobby.replace('\n', ',')
Out[61]:
'バスケットボール,読書,ガジェット集め'
In [62]:
hobby.replace('\n', '')
Out[62]:
'バスケットボール読書ガジェット集め'

一括で取得

各項目名

In [63]:
elem_th = browser.find_element_by_tag_name('th')
In [64]:
elem_th.text
Out[64]:
'講師名'
In [65]:
elems_th = browser.find_elements_by_tag_name('th')
In [66]:
elems_th.text
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-66-d98a663d558c> in <module>()
----> 1 elems_th.text

AttributeError: 'list' object has no attribute 'text'
In [67]:
type(elems_th)
Out[67]:
list
In [68]:
elems_th
Out[68]:
[<selenium.webdriver.remote.webelement.WebElement (session="7c7997a25565eb1fbf2a2ca103c51b72", element="0.6800993313991661-6")>,
 <selenium.webdriver.remote.webelement.WebElement (session="7c7997a25565eb1fbf2a2ca103c51b72", element="0.6800993313991661-7")>,
 <selenium.webdriver.remote.webelement.WebElement (session="7c7997a25565eb1fbf2a2ca103c51b72", element="0.6800993313991661-8")>,
 <selenium.webdriver.remote.webelement.WebElement (session="7c7997a25565eb1fbf2a2ca103c51b72", element="0.6800993313991661-9")>,
 <selenium.webdriver.remote.webelement.WebElement (session="7c7997a25565eb1fbf2a2ca103c51b72", element="0.6800993313991661-10")>]
In [69]:
len(elems_th)
Out[69]:
5
In [70]:
elems_th[0].text
Out[70]:
'講師名'
In [71]:
elems_th[1].text
Out[71]:
'所属企業'
In [72]:
keys = []
for elem_th in elems_th:
    key = elem_th.text
    keys.append(key)
In [73]:
keys
Out[73]:
['講師名', '所属企業', '生年月日', '出身', '趣味']

各値

In [74]:
elems_td = browser.find_elements_by_tag_name('td')
In [75]:
values = []
for elem_td in elems_td:
    value = elem_td.text
    values.append(value)
In [76]:
values
Out[76]:
['今西 航平', '株式会社キカガク', '1994年7月15日', '千葉県', 'バスケットボール\n読書\nガジェット集め']

CSVファイルに出力

In [77]:
import pandas as pd
In [78]:
#空のDataFrameを定義
df = pd.DataFrame()
In [79]:
df['項目'] = keys
df['値'] = values
In [80]:
df
Out[80]:
項目
0 講師名 今西 航平
1 所属企業 株式会社キカガク
2 生年月日 1994年7月15日
3 出身 千葉県
4 趣味 バスケットボール\n読書\nガジェット集め
In [81]:
df.to_csv('講師情報.csv')
In [82]:
df.to_csv('講師情報.csv', index=False)