QA@IT

Ruby Nokogiri で.jspページの情報が取得できない

3117 PV

最近Rubyの勉強を初め、nokogiriを使ってスクレイピングを行おうとしたものの『.jsp』の使われているページ情報を取得することができません。
どなたかご教授願います。

require 'open-uri'
require 'nokogiri'

url = 'http://www.nenkin.go.jp/n/www/service/detail.jsp?id=2016'

charset = nil
html = open(url) do |f|
    charset = f.charset
    f.read
end

doc = Nokogiri::HTML(open(url), nil, "utf-8")
p doc.title

追記

/Users/aaa.rbenv/versions/2.1.0/lib/ruby/2.1.0/open-uri.rb:223:in `open_loop': redirection forbidden: http://plus.timescar.jp/view/station/detail.jsp?scd=U001 -> https://api.timesclub.jp/view/loginCheck.jsp?siteKbn=TP&redirectPath=http%3A%2F%2Fplus.timescar.jp%2Fview%2Fstation%2Fdetail.jsp%3Bjsessionid%3D3288E512A2A375F3B41E46232BC567D0%3Fscd%3DU001 (RuntimeError)
    from /Users/aaa/.rbenv/versions/2.1.0/lib/ruby/2.1.0/open-uri.rb:149:in `open_uri'
    from /Users/aaa/.rbenv/versions/2.1.0/lib/ruby/2.1.0/open-uri.rb:703:in `open'
    from /Users/aaa/.rbenv/versions/2.1.0/lib/ruby/2.1.0/open-uri.rb:34:in `open'
    from sukureipingu.rb:32:in `<main>'
  • コメントの方に追記しました。 -
  • ご教授ありがとうございます。
    加えましてご教授ありがとうございます。
    -

回答

どう上手くいかないのか説明がないのでわかりませんが、
とりあえずそのページはutf-8ではありません。

charsetは別途取得しているので以下の様にすれば良いと思います。

doc = Nokogiri::HTML(open(url), nil, charset)

Mac OS X 10.9.4
ruby 2.1.2
nokogiri 1.6.2.1

ではきちんと("日本(以下略)")取得できました

編集 履歴 (0)
  • ありがとうございます!
    保険のサイトでは取得ができました。

    下記サイトでもできる方法はないでしょうか?
    http://plus.timescar.jp/view/station/detail.jsp?scd=U001
    -
  • どうなったのかも書いてください。 -
  • 追記に書きました、エラーが出ました。 -
  • 該当のページはCookieやクエリ文字列に正しいセッションIDをセッションIDを持っていないとログインしているかどうかを判定するためにリダイレクトを行います。open-uriではなくnet/httpを使わないと難しいかと思います。 -
  • それとは別に、勝手に人のサイトに大量のアクセスをすると迷惑行為とみなされる場合がありますので過剰アクセスにならないよう気を付けてください。過去にWebサイトのクローラ作って問題になった事件がありました。 -
  • ちなみに、リダイレクトを許可してみたり(エラー自体はリダイレクトが許可されていないためにでているので)、SSLチェックを甘くしてみたり、jsessionid(正しいもの)を手動で付加したアドレスにしてみたり、open-uriでいろいろためしましたがどれもだめでした。 -
  • ご教授ありがとうございます。
    加えまして大量アクセスの件承知いたしました。わざわざありがとうございます。
    -

わざわざありがとうございます。

編集 履歴 (1)
ウォッチ

この質問への回答やコメントをメールでお知らせします。