みなさん、こんにちは。
今回は、Rubyのgemである「Mechanize」を使って、Webスクレイピングする方法をまとめていこうと思います。
誰しも一度はやりたいと思ったはずの「Webスクレイピング」を簡単にできるライブラリが、「Mechanize」というgemです。
Webの構成は、そこまで難しいことではないので一定のリズムのような手法を覚えれば、あとはそれらを組み合わせれば、基本的にどんなサイトのスクレイピングもできるようになります。
今回は「Mechanize」が備えている機能を紹介しつつ、どのように使っていくかを書いていこうと思います。
目次
Mechanizeの使い方
Mechanizeを使うための下準備
まず最初に、gemをインストールしましょう。
そして、早速インスタンスを生成し、サイトにアクセスしてみましょう。
上のコードでエラーが出なければ、下準備完了となります。
あとは自分の思った通りの操作を「Mechanize」でできるようにするだけです。
ちなみに上のコードを実行したとき、「page」にはアクセスしたページのHTML情報が入っています。
「page.body」というメソッドで取得したファイルをすべて表示することができます。
要素を探索する方法
次は上記の「page.body」の中から、自分が探したい要素の情報を探索して抽出する方法です。
探索に必要なメソッドはsearchメソッドというものを使います。以下のコードを見てください。
変数名からわかる通り、searchメソッドでは複数の情報が探索・抽出されます(elements)。
リンクを操作する方法
次はリンクを取得してみましょう。
linksメソッドも先ほどのsearchメソッド同様に複数のリンクを取得するので、結果は配列に入ります。
そこからさらに、個別にテキストや要素のみを抽出するには、each文などで回すことが必要です。
そこで、textやhref(要素名)などを指定することで、値を取得することができます。
ここまでで、リンクの値などを取得することはできるようになります。
しかしリンクはどこかの画面に遷移(移動)するためにあるものなので、その先のページまでクローリングしたいのではないでしょうか?
そのような時は、以下のようにすればOKです。
特定のリンクを選択するには、テキストとURLで指定できます。
フォームを操作する方法
フォームの操作は、基本的にリンクと同じ要領でOK。
このようにリンクの場合はclickでしたが、formの場合は「submit」という操作をすることで、フォームに入力した値を文字通り「提出する」ことができます。
また、formやfieldを指定する時は色々な指定方法があります。
ログインが必要なサイトにアクセスする方法
ここまでフォームやリンクなどの主体的な操作を紹介してきました。
それを組み合わせることでログインが必要なサイトへの、Webスクレイピングも可能になります。
以下のコードを見てみてください。
このように、今までやったフォームなどを組み合わせて、ログインしてその中でスクレイピングをすることができます。
クッキー情報を取得する方法
さらに、先ほどログインしたことにより、クッキー情報を取得することもできます。
その機能もMechanizeは備えているので、使い方を紹介します。
上のように、ログインしたことでクッキーを取得することができました。
このクッキーを利用して、http通信を行うことなどもできるので、さらに応用できそうです。
まとめ
ここまで「Mechanize」というGemについて説明してきましたが、いかがでしたか?
一言で「Mechanize」と言っても、様々な機能があるため使いこなすには、多かれ少なかれ慣れが必要だとおもいます。
しかし慣れてしまえば、Web上の情報を収集して効率的に仕事が進められたり、色々と応用範囲が広い(夢が広がる?)と思うので、ぜひ有効活用してみたい代物です!
最低限、今回紹介したものの使い方を押さえていれば、その組み合わせ次第で基本的なことは、ほぼ全てできると思います。
とは言っても、今回紹介した情報だけでなく他にも便利な機能があるので、それらも調べてみると新しい発見があるかもしれません。
今回も読んでいただき、ありがとうございました。
コメントを残す