Webページを取得して操作する方法に、Seleniumというのがあるのを最近知りました。
Selenium
テーブルが使われたWebページから内容を取得したかったので、その方法を調べました。
Seleniumはいろんな言語からアクセスすることが出来るようですが、今回はPythonを使ってみました。
対象となるページは以下のような感じ。
<html> <head></head> <body> <table class="table_desu"> <tr> <th>No</th><th>品目</th><th>価格</th> </tr> <tr> <td>1</td><td>りんご</td><td>150</td> </tr> <tr> <td>2</td><td>みかん</td><td>120</td> </tr> <tr> <td>3</td><td>ぶどう</td><td>200</td> </tr> </table> </body> </html>
こちらは、Python+Seleniumで上記Webページにアクセスし、テーブルの内容を先頭行をのぞいて取得し、標準出力に表示する例です。
テーブル内容を取得する方法がJavascriptみたいで親近感わきましたが、実はもっとスマートなやり方があるのかしら...
#!/usr/bin/python # -*- coding: utf-8 -*- import selenium from selenium import webdriver from selenium.webdriver.common.by import By from pyvirtualdisplay import Display BASE_URL = "http://hoge.fuga/" try: display = Display(visible=0, size=(800, 600)) display.start() driver = webdriver.Firefox() driver.implicitly_wait(30) # Webページへアクセス driver.get(BASE_URL) driver.implicitly_wait(15) # テーブル内容取得 tableElem = driver.find_element_by_class_name("table_desu") trs = tableElem.find_elements(By.TAG_NAME, "tr") # ヘッダ行は除いて取得 for i in range(1,len(trs)): tds = trs[i].find_elements(By.TAG_NAME, "td") line = "" for j in range(0,len(tds)): if j < len(tds)-1: line += "%s\t" % (tds[j].text) else: line += "%s" % (tds[j].text) print line+"\r\n" except: print traceback.format_exc() finally: if driver is not None: driver.quit() if display is not None: display.stop()
実行結果は以下の通り
1 りんご 150 2 みかん 120 3 ぶどう 200