以前、PythonのRobobrowserというモジュールを使ってブログの全記事の名前とURLを取得するプログラムを紹介しました。
今回はSeleniumというモジュールを使って、さらに分かりやすく精度の高いスクレイピング&ブラウザ操作が可能であることを知ったのでメモを残します。
・Seleniumってなに?
Seleniumはもともとアプリの自動テストツールとして開発されていたようです。それが「あれ、これスクレイピングとかでも使えるんでね?」という話になって、今ではその界隈でよく使われるツールとして活躍しています。
またPythonに限らずJavaやRubyなど、さまざまな言語に使われているツールです。そのため情報量が多く、分からないことがあればネット検索すれば大体は解決するというのが強みの一つです。
・Seleniumで出来ること
Seleniumがあればスクレイピング、ブラウザ自動操作が可能です。
Robobrowserは内部にBeautifulSoupが組み込まれているので、Robrowser単体でテキスト取得などが可能です。
言うまでもなくSeleniumでもそれは可能で、さらに要素の取得方法が豊富です。
以下(Seleniumクイックリファレンスより抜粋)の要素からSeleniumは要素を特定、取得することが可能です。
By.id(id属性の値を用いて要素を指定する) ・By.name(name属性の値を用いて要素を指定する) ・By.tagName(HTMLタグ名用いて要素を指定する) ・By.className(クラス名を用いて要素を指定する) ・By.linkText(a要素の文字列を用いて要素を指定する) ・By.partialLinkText(a要素の部分文字列を用いて要素を指定する) ・By.cssSelector(CSSセレクタを用いて要素を指定する) ・By.xpath(XPathを用いて要素を指定する)
HTMLにidがなければnameから、nameがなければxpathから…。
これだけ取得方法が豊富にあるため、特定できないという問題が起こりません。
また、テキスト抽出、クリック、キーを打ち込む、テキスト入力もできるため自動でログインすることも可能です。
さらにSeleniumはJavascriptが認識できます。よって、
ダイアログが表示されて先に進めねぇじゃ~ん!!
ということになりません。
革新的ですね。
・まとめ
以上、Seleniumとプログラムの例を紹介しました。
なお、僕が愛読している「Pythonクローリング&スクレイピング」にはSeleniumを使う際にPhantomJSを使うように説明していますが、現在はサポートを終了していますので、Chromedriverを使うことをお勧めします(PhantomJS開発者もChromeを使うことをおススメしてる)。