ページ内容の取得

クローラ作成の手始め…というか何やったらいいのかわからないので、
なんか文字列指定してその文字列がサイト内にあるかどうかを見ればいいんよね。
ってことで、指定したURLの内容を取得する方法をちょこっと調べる。
twitterクライアントのときにも見かけたnet/httpライブラリ使うようなのが見つかったけど、
なーんかめんどくさそうな印象があr…(ゲフンゲフン のでとりあえず置いておいて、
それとは別で、open-uriライブラリというのがあった。
使い方もシンプルな感じなので、とりあえずこれを使えるかどうか試してみる。

で、実際に書いたコードはこんななかんじ


1 |# -*- coding: utf-8 -*-
2 |require "open-uri"
3 |
4 |# open-uriライブラリを試す
5 |# 指定したURLにアクセスし、htmlをそのまま表示する
6 |
7 |open("http://www.google.com") do |cont|
8 | puts "#{cont.read}"
9 |end

実行するとたしかにページの内容を取ってきて表示してくれる。
(もちろんHTMLタグ付きなままで…)
まぁHTMLタグが付いてるのは今回どうでもいいとしても、表示されたものをみると、
utfの数値文字参照?のような形式で表示されている部分があるので、
文字コードを確認してみる。
Ruby1.9?あたりから追加されたらしい String#encodingを使ってみる。
上のコードの8行目を


puts "#{cont.read}".encoding
に変えて実行してみると…shift-jisで表示されてる。
ので、UTF8で表示されるために、同じく8行目を変更する

puts "#{cont.read}".encode("utf-8")
これでちゃんと日本語も表示されましたっと。


今回はクローラをサーバで動かさないといけないとのことで、
shift-jisで表示されてるところをわざわざutf-8に変更した。
今までのようにWindowsコマンドプロンプト上でやる分にはこの変更いらなかったんやけどなぁとか思わなくもない…