2012-04-11 3 views
1

Rubyを使ったラーニングスクレイピング。私は与えられたページにあるアウトバウンドリンクの数を数えようとしていますが、私はルビーにどのようにアウトバウンドリンクをカウントさせるだけでいいのか分かりません。ページのアウトバウンドリンクの数をカウントするにはどうすればよいですか?

私の現在のコード:

require "open-uri" 

# Collect info 
puts "What is your URL?" 
url = gets.chomp 
puts "Your URL is #{url}" 
puts "Loading..." 

# Check keyword count 
page = open(url).read 
link_total = page.scan("</a>") 
# obl_count = ??? 
link_count = link_total.count 
puts "Your site has a total of #{link_count} links." 

どのように私はこれを完了することができますか?

答えて

1

ちょうどyou should never parse HTML with regular expressionsと同じように、汚れた作業を行うには、おそらくnokogiriを使用しているはずです。

簡単に言うと、CSSセレクタを使ってタグを見つけることができます。そこからカウントするのは簡単です:

Nokogiri::HTML(page).css('a').length 
+0

ありがとう、私はこのルールについて知らなかった。内部リンクと外部リンクをどのように分けるか考えていますか?つまり、特定のWikiページのリンク数をカウントしてから、ページ上のリンクを減算して他のWikipediaページにリンクしますか? – Stn

+0

好きな場合は、各リンクの内容を調べることができます。 Nokogiriは 'href'属性にアクセスするために使用できる特別なオブジェクトの配列を返します:' Nokogiri :: HTML(page).css( 'a')。collect {| a | a.attr( 'href')} 'リンクの最初の文字が'/'であるかどうかを調べるのは簡単なテストです。この場合はローカルリンクです。より堅牢なテストでは、URI解析モジュールとURI.joinを使用して、リンクされている多くのWikipediaサイトの1つであるかどうかを判断します。 – tadman

1

あなたが使用することができます。

http://anemone.rubyforge.org/

アネモネは、それが迅速かつ無痛のウェブサイトをスパイダープログラムを書くことができますRubyのライブラリです。サイトのすべてのページでアクションを実行し、特定のURLをスキップし、サイト上の特定のページへの最短パスを計算するためのシンプルなDSLを提供します。

マルチスレッド設計は、アネモネを高速化します。 APIによって簡単にできます。そしてRubyの表現力はそれを強力にします。

関連する問題