2012-04-11 7 views
1

Lernen, Kratzen mit Ruby. Ich versuche, die Anzahl der ausgehenden Links zu zählen, die eine bestimmte Seite hat, aber ich bin mir nicht sicher, wie ich Ruby mitteilen soll, dass nur die ausgehenden Links gezählt werden sollen.Wie kann ich die Anzahl der ausgehenden Links einer Seite zählen?

Mein aktueller Code:

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." 

Wie kann ich dieses vollenden?

Antwort

1

Genau wie you should never parse HTML with regular expressions sollten Sie wahrscheinlich nokogiri verwenden, um die schmutzige Arbeit für Sie zu erledigen.

In einfachen Worten können Sie CSS-Selektoren verwenden, um Tags zu finden. zu zählen, von dort aus ist es einfach:

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

Danke, ich wusste nicht über diese Regel. Haben Sie eine Idee, wie ich die internen und ausgehenden Links trennen würde? Zählen Sie Links auf einer bestimmten Wiki-Seite für die Gesamtzahl, und subtrahieren Sie dann die Links auf der Seite, die mit anderen Wikipedia-Seiten verlinkt sind? – Stn

+0

Sie können den Inhalt jedes Links überprüfen, wenn Sie möchten. Nokogiri gibt eine Reihe von speziellen Objekten zurück, die verwendet werden können, um auf das 'href'-Attribut zuzugreifen: 'Nokogiri :: HTML (Seite) .css (' a '). Collect {| a | a.attr ('href')} 'Ein naive Test wäre es zu sehen, ob das erste Zeichen eines Links'/'ist. In diesem Fall ist es ein lokaler Link. Ein robusterer Test würde das URI-Parsing-Modul und 'URI.join' verwenden, um festzustellen, ob es sich um eine der vielen Wikipedia-Seiten handelt, mit denen eine Verbindung hergestellt wird. – tadman

1

Sie verwenden können:

http://anemone.rubyforge.org/

Anemone eine Ruby-Bibliothek ist, dass es schnell und schmerzlos zu schreiben Programme macht, die eine Website Spinne. Es bietet eine einfache DSL für die Durchführung von Aktionen auf jeder Seite einer Website, das Überspringen bestimmter URLs und die Berechnung des kürzesten Pfads zu einer bestimmten Seite einer Site.

Das Multi-Thread-Design macht Anemone schnell. Die API macht es einfach. Und die Ausdruckskraft von Ruby macht es stark.