テキストデータを自動抽出¶
演習¶
先程使用した以下のページにアクセスし、ログインするまでの流れを
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 [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)