python+SeleniumでWebページのデータを自動取得する
SeleniumはWebブラウザの自動操作ライブラリです。Seleniumを用いることで人間がWebブラウザ上で行う作業を自動化することができます。
Seleniumの一般的な用途としては、単純作業の自動化の他にWebアプリケーションの自動化などが挙げられます。
今回はSeleniumでWebページにアクセスしてcsvファイルをダウンロードするという作業を自動化します。
使用するもの
今回の主役です。様々な言語に対応して提供されていますが、今回はpythonを使用します。
- ChromeDriver
ブラウザ(Chrome, Firefox, Safari etc...)のdriverを指定することでSeleniumを各ブラウザで実行することができます。
それぞれのブラウザではヘッドレスモード(ブラウザを実際にGUI上に立ち上げずに実行するモード)が可能です。今回はデータを取得するだけなのでヘッドレスモードで実行します(オプションで--headless
で指定するだけ)。
2018年6月2日ヘッドレスブラウザの代名詞だったPhantomJSの開発が終了アーカイブ化されたので、上記のブラウザを使用することをおすすめします。
なお、今回高頻度で利用することはないのでCircleCIは使用しません。
Selenium操作の基本部分
from selenium.webdriver import Chrome, ChromeOptions options = ChromeOptions() options.add_argument('--headless') driver = Chrome('chromedriverのパス', options=options) driver.get('操作したいブラウザのURL')
この部分がSeleniumによるブラウザ自動操作の基本部分になります。
オプションで--headless
を指定することでヘッドレスモードを選択できます。
driverでChromeを指定したあとは、driver.get(URL)
でブラウザを開くことができます。
スクレイピング
Seleniumを用いたスクレイピングも一般的なスクレイピング同様HTMLの要素にアクセスして実行していきます。
# idで取得 driver.find_element_by_id('ID') # classで取得 driver.find_element_by_class_name('CLASS_NAME') # nameで取得 driver.find_element_by_name('NAME') # xpathで取得 driver.find_element_by_xpath('XPATH')
ChromeのDeveloper toolsを使えばWebページを構成するHTMLがわかるので地道にみながら操作していく感じです。 elementの部分をelementsにすると該当する要素が複数取得できます。 elementでアクセスした際、要素が複数ある場合は一番はじめの要素にアクセスできます。
データの自動取得
今回は日本経済新聞の経済指標ダッシュボードのcsvデータを取得します。
https://vdata.nikkei.com/economicdashboard/macro/
経済指標ダッシュボードは日本経済の動向を把握するのに役に立つ経済指標が一覧できるサイトです。 ブラウザ上で表示されているグラフをクリックするとcsvがダウンロードできるボタンが表示されます。
基本方針としては、csvデータのURLが含まれる要素まで行ってgetAttribute()
で名前付けされた属性の値を取得しにいくという方針です。
そしてそこで取得したURLに対して
import urllib urllib.request.urlretrieve('指定のURL', '保存先のファイル名')
でURLからデータをダウンロードします。
githubにコードを上げてあります。
まとめ
Seleniumでブラウザ操作が自動化できるとかなり効率化につながりますね。まだまだ勉強できていないので色々試しながらやっていきたいです。
以下は今回勉強するに当たって参考にしたサイトです。大変勉強になりました。
HTML付近の勉強は下の本をチラ見しながら勉強しました。図が豊富でわかりやすいです。
- 作者: 高橋朋代,森智佳子
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2013/12/14
- メディア: 単行本
- この商品を含むブログ (11件) を見る