らくがき入門

機械学習を始めとしたコンピュータサイエンスを主に扱っています。

python+SeleniumでWebページのデータを自動取得する

SeleniumWebブラウザの自動操作ライブラリです。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にコードを上げてあります。

github.com

まとめ

Seleniumでブラウザ操作が自動化できるとかなり効率化につながりますね。まだまだ勉強できていないので色々試しながらやっていきたいです。

以下は今回勉強するに当たって参考にしたサイトです。大変勉強になりました。

tech.mercari.com

HTML付近の勉強は下の本をチラ見しながら勉強しました。図が豊富でわかりやすいです。

作りながら学ぶ HTML/CSSデザインの教科書

作りながら学ぶ HTML/CSSデザインの教科書