2012-04-11 1 views
1

Обучение соскабливание с Ruby. Я пытаюсь подсчитать количество исходящих ссылок на данной странице, но я не уверен, как сообщить 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 для общего подсчета, а затем вычитать ссылки на странице, которые ссылаются на другие страницы Википедии? – Stn

+0

Вы можете проверить содержимое каждой ссылки, если хотите. Nokogiri возвращает массив специальных объектов, которые можно использовать для доступа к атрибуту 'href':' Nokogiri :: HTML (page) .css ('a'). Collect {| a | a.attr ('href')} 'Наивный тест состоял бы в том, чтобы увидеть, является ли первый символ ссылки'/', и в этом случае это локальная ссылка. Более надежный тест будет использовать модуль синтаксического анализа URI и 'URI.join', чтобы определить, является ли он одним из многих сайтов Википедии, с которыми он связан. – tadman

1

Вы можете использовать:

http://anemone.rubyforge.org/

Anemone библиотека Руби, которая позволяет быстро и безболезненно писать программы, которые SpIDer сайт. Он предоставляет простую DSL для выполнения действий на каждой странице сайта, пропускает определенные URL-адреса и вычисляет кратчайший путь к данной странице на сайте.

Многопоточный дизайн делает Anemone быстрым. API делает его простым. И выразительность Ruby делает его мощным.