Rubyでクローラーを作りたい(んだけど分からん) 01

ネット中の単語をランダムはいつ作ってくれるんだろうなー。

このお言葉からじゃあ、どうやればいいのと考えて、取り敢えずURLを収集するクローラーとか言うのがいるんじゃないのと思った。

ちなみにRubyはまだ文法も覚えてない。

とにかく作りながら勉強すりゃいいじゃんと言うことで、検索をかけると良いスライドが見つかった。

Rubyで作るクローラー Ruby crawler

本文の解析とかは後回しだ。とにかくaタグのURLを収集できれば良い。
# robots.txtには従いたいが
まず、Webページを読み込むためのOpen-URIとやらの使い方だな。

Rubyは幸いインストールしてある。
ActiveScriptRuby and Other packages
ここの"Ruby-2.1.2-p95 Microsoft Installer Package(2014-5-08 revision 45877改)"だ。

Open-URIで検索をかけるとリファレンスマニュアルが最初に出た。
library open-uri
幸先が良い。特にモジュールやらのインストールはいらないようである。
早速、最初の例文をそのまま書いて実行してみる。

require 'open-uri'
open("http://www.ruby-lang.org/") {|f|
  f.each_line {|line| p line}
}

すんなり行くかなと思ったら、エラーが出た。

D:\pg\ruby-test>ruby open-uri-test.rb
D:/pg/ruby/lib/ruby/2.1.0/open-uri.rb:223:in `open_loop': redirection forbidden:
 http://www.ruby-lang.org/ -> https://www.ruby-lang.org/ (RuntimeError)
        from D:/pg/ruby/lib/ruby/2.1.0/open-uri.rb:149:in `open_uri'
        from D:/pg/ruby/lib/ruby/2.1.0/open-uri.rb:704:in `open'
        from D:/pg/ruby/lib/ruby/2.1.0/open-uri.rb:34:in `open'
        from open-uri-test.rb:3:in `<main>'

D:\pg\ruby-test>

redirection forbidden?(・ω・ )
ブラウザで開いてみたら
http://www.ruby-lang.org/https://www.ruby-lang.org/へリダイレクトされた。
Open-URIはリダイレクトに対応していないか、何かオプションでもあるのだろう。
しょうがないので、httpsに書き換えて再挑戦すると、今度はSSLのコネクトで失敗してるぞというエラーが出た。
雲行きが怪しくなってきた。

httpsでの接続は避けて通れないと思うのだが、ここは後回しにして、とにかく一度接続し表示している所が見たい。と言うことで、Yahoo!に行ってみることにした。
URLを書き換えて見事成功である。

しょっぱなからこれか、苦労しそうな気がしてきた。