おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

rubyでwebにアクセスするライブラリ、何使う?

rubyでwebにアクセスするライブラリが複数あります。

  • 標準のライブラリ
    • open-uri
    • Net::HTTP
  • gemライブラリ
    • mechanize
    • curb(curl)

どんなときにどれを使ったらいいんでしょうね?ということで簡単にですがそれぞれの特徴を調べてみました。

open-uri

この中で一番簡単なライブラリ。openメソッドを拡張して、webページを普通のファイルのようにオープンできるようにします。詳しい使い方は下記参考。

open-uri - Rubyリファレンスマニュアル

Net::HTTP

getの他にpostやリダイレクトにも対応。下記のように、ブロックの中でサーバ内のコンテンツにアクセスするように書くので、同一サーバに何度もアクセスする場合はopen-uriより便利。

require 'net/http'
Net::HTTP.version_1_2
Net::HTTP.start('www.ruby-lang.org', 80) { |http|
  response = http.get('/ja/') # ディレクトリを指定
  response.body
}

詳しくは下記を参考に。

net/http - Rubyリファレンスマニュアル
Rubyist Magazine - 標準添付ライブラリ紹介 【第 7 回】 net/http

Mechanize

他の二つと違って、履歴の管理やクッキーのやり取り、リンクのアクセス等ができます。さらに、hpricot*1を使ってHTMLのパースを行い、HTMLの各要素を指定してアクセスすることができます。これがものすごく強力。さらに、「テキストフィールドに文字列を入れて、ログインボタンを押す」ようなことも書くことができます。スクレイピングをしたい時にはとても便利ですね。でも多機能な分、前の2つと比べると少し重いみたいです。

バグ

以前のエントリに書いたけれど、0.7.6にはバグがあります。

Mechanizeのバグではまった - おもしろWEBサービス開発日記

curb(curl)

lib-curlへのバインディングを提供するライブラリ。なので、curlコマンドでできること(普通のアクセスの他に、クッキーを取得したり、ファイルのアップロードをしたりなど)はほぼできるみたいです。curbのインストールの他に、lib-curlも必要です*2


curbはドキュメントがあまりありません。
Curb - libcurl bindings for ruby

まとめ

  • スクレイピングするときはmechanize
  • ちょっとアクセスしたいときはopen-uriかNet::HTTP
  • いろいろ設定してアクセスしたい時はcurb

なのかな?それぞれ使い込んでみるべきだな。

追記

httpclientというライブラリもあるそうです。ぱっと見使いやすそう。

Rubyでwebにアクセスするならhttpclientが手軽 - ’(rubikitch wanna be (a . lisper))

*1:「えっちぴーりこっと」と読む人が多いらしい

*2:macには最初から入っているっぽいです