2012-05-02 15 views
0

指定されたWebページに文字(a、b、cなど)のヒストグラムを作成しようとしています。私はハッシュを使ってヒストグラムそのものを作るつもりです。しかし、私は実際にHTMLを取得するには少し問題があります。RubyでHTMLテキストをダウンロード

私の現在のコード:

#!/usr/local/bin/ruby 


require 'net/http' 
require 'open-uri' 


# This will be the hash used to store the 
# histogram. 
histogram = Hash.new(0) 

def open(url) 
    Net::HTTP.get(URI.parse(url)) 
end 

page_content = open('_insert_webpage_here') 

page_content.each do |i| 
    puts i 
end 

これはHTMLを得るための良い仕事をしていません。しかし、それはすべてそれを取得します。 www.stackoverflow.comのために私にそれを与える:

<body><h1>Object Moved</h1>This document may be found <a HREF="http://stackoverflow.com/">here</a></body> 

私は正しいページであるとふりをした、私はHTMLタグを望んでいない。私はちょうどObject MovedThis document may be found hereを得ようとしています。

これを実行する方法はありますか?

+0

http://stackoverflow.com/questions/2505104/html-to-plain-text-with-ruby ます。http:// stackoverflowの.com/questions/2505104/html-to-plain-text-with-ruby – Flexoid

+0

ノコギリなしで追加したはずです。私は使用するためにそれがインストールされていない私の学校のサーバーからそれを実行しています。 – Linell

答えて

2

あなたrequire 'open-uri'、あなたはネット:: HTTPでopenを再定義する必要がない場合。

require 'open-uri' 

page_content = open('http://www.stackoverflow.com').read 

histogram = {} 
page_content.each_char do |c| 
    histogram[c] ||= 0 
    histogram[c] += 1 
end 

注:これはHTML文書内<tags>を取り除くないので、<html><body>x!</body></html>ではなく{ 'x' => 1, '!' => 1 }{ '<' => 4, 'h' => 2, 't' => 2, ... }を持つことになります。タグを削除するには、Nokogiri(利用できないと言った)や正規表現のようなもの(Dru's answerなど)を使用できます。鋸山なし

+0

ありがとうございました!私はRubyの新機能ですが、 '|| = 0'部分が何をしているのか説明できるかどうか疑問に思っていましたか? – Linell

+1

最初の文字がhelloのために '' h''であるとします。 '|| = 0'部分は' histogram ['h'] 'がセットされているかどうかをチェックし、そうでなければ0に初期化します。ヒストグラム['h'] = histogram [ 'h'] || 0 'となる。 'histogram = Hash.new(0)'を初期化する必要がありますが、時には問題があります。 –

+0

ああ、ありがとう! – Linell

1

ネット上の「リダイレクション後」を参照してください:: HTTPドキュメントhere

関連する問題