Je tente de construire un robot d'indexation Web et s'est heurté à un peu d'un problème. Fondamentalement, ce que je fais est d'extraire les liens d'une page Web et de pousser chaque lien vers une file d'attente. Chaque fois que les hits Ruby interprète cette section du code:Ruby EOFError avec open-uri et la boucle
links.each do |link|
url_frontier.push(link)
end
Je reçois l'erreur suivante:
/home/blah/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/protocol.rb:141:in `read_nonblock': end of file reached (EOFError)
Si je commente le bloc au-dessus d'un code je reçois aucune erreur. S'il vous plaît, toute aide serait appréciée. Voici le reste du code:
require 'open-uri'
require 'net/http'
require 'uri'
class WebCrawler
def self.Spider(root)
eNDCHARS = %{.,'?!:;}
num_documents = 0
token_list = []
url_repository = Hash.new
url_frontier = Queue.new
url_frontier.push(root.to_s)
while !url_frontier.empty? && num_documents < 10
url = url_frontier.pop
if !url_repository.has_key?(url)
document = open(url)
html = document.read
# extract url's
links = URI.extract(html, ['http']).collect { |u| eNDCHARS.index(u[-1]) ? u.chop : u }
links.each do |link|
url_frontier.push(link)
end
# tokenize
Tokenizer.tokenize(document).each do |word|
token_list.push(IndexStructures::Term.new(word, url))
end
# add to the repository
url_repository[url] = true
num_documents += 1
end
end
# sort by term (primary) and document id (secondary) in reverse to aid in the construction of the inverted index
return num_documents, token_list.sort_by! { |term| [term.term, term.document_id]}.reverse!
end
end