2017-01-31 5 views
2

だから、私はウェブパーサーを作りましたが、それは良いことでしたが、<head>の中にいくつかの言葉が入っているのが見えました(そして<strong>も体内にあります)。私のコードはThis one here before nokogiriですが、私はRubyプログラミングの新機能で、数時間前にNokogiriについて知り始めました。<head>を削除すると、私はガイド/アシスタンスが必要です

私は誰かがこの仕事をするのを助けてくれることを願っています。私はURLを読み取る必要があります。<head>とその中のすべてを削除して、ページの残りの部分で単語をスキャンしてください。

PS:本体を持ってきて読み込めますか?それは簡単だろう PSS:約<strong>タグについては、それを削除するのは難しいですか?

私の運動は、ソースコード、ページ内にあるどのように多くのespecific言葉ではないカウントである私は本当に誰かが>私を助けることを願って身体をつかむと、タグ

を排除する必要がある理由、thatsの。 < Thnksみんな!ここで

は私の実際の障害コード/純粋なオリジナルがhere

require 'open-uri' 
require 'cgi' 
require 'nokogiri' 



class Counter 

    def initialize(url) 
     @url = url 
    end 

    def decapitate 

     Nokogiri::HTML(url) 

     url.css('head').remove.to_s 
    end 

    def scan(word) 
     url.scan(word) 
    end 



end 

url, word = ARGV 

puts "Found #{Counter.new(url).open.decapitate.scan(word).length} maches." 

答えて

3

多くのミスです。 decapitate

  • url未定義のローカル変数です。 @urlを使用する必要があります。

  • Nokogiri::HTMLは、IOオブジェクトか、URLではなく文字列のどちらかが必要です。あなたはおそらく、私はあなたが

  • Nokogiri::HTMLopen-uriが文書を返す必要であることを考えると、想定していますが、この戻り値を格納しない(URLの内容を読み取るためにopen(@url)を使用していたどこにでも

  • その結果、url(またはむしろ@url)は、文字列になり、文字列はcssメソッドを持っていない、あなたの代わりに

  • removeが除去されたノードを返しますドキュメントにcssを適用したい。最後として、メソッド内のものは、返されるものになります。したがってdecapitateheadノードのテキストを返します。

  • 最後に...decapitate.scanは、定義したメソッドではなくString#scanメソッドを呼び出します。

次のようにあなたがやりたいことができます: `@のurl`を使用して

def count(pattern, url) 
    doc = Nokogiri::HTML(open(url)) 
    doc.css('head').remove 
    doc.text.scan(pattern).size 
end 
+0

は、おそらく二つの異なる方法に二回url''に渡すよりも優れています。 – tadman

+0

@tadman:ああ、おそらく私は明らかではなかった。私の解決策はプラグインではなく、OPの代わりです。それを適応させるのは簡単です。もしそれがクラスに入っていたら、コンストラクタで切り詰めて切り詰めてテキスト化し、 '@ url'ではなく' @ text'を格納して、同じ文書上で複数のものを数えることができます... – Amadan

+0

ああ、それ独立した方法です – tadman

関連する問題