2010-11-29 9 views
3

Je suis en train de faire un crawl, mais avant d'explorer un site entier, je voudrais faire un test, d'une ou deux pages. Donc je pensais quelque chose comme ci-dessous serait travailler, mais je continue à obtenir un NoMethodError ....anemone Ruby avec focus_crawl

Anemone.crawl(self.url) do |anemone| 
     anemone.focus_crawl do |crawled_page| 
     crawled_page.links.slice(0..10) 
     page = pages.find_or_create_by_url(crawled_page.url) 
     logger.debug(page.inspect) 
     page.check_for_term(self.term, crawled_page.body) 
     end 
    end 

NoMethodError (private method `select' called for true:TrueClass): 
    app/models/site.rb:14:in `crawl' 
    app/controllers/sites_controller.rb:96:in `block in crawl' 
    app/controllers/sites_controller.rb:95:in `crawl' 

Fondamentalement, je veux avoir un moyen de première Craw seulement 10 pages, mais il me semble être de ne pas comprendre les bases ici. Est-ce que quelqu'un peut m'aider? Merci!

Répondre

0

J'ai donc trouvé le paramètre: depth_limit param et ça ira, mais je préfère le limiter à # de liens.

0

J'ai trouvé votre question pendant que je recherchais l'anémone.

J'ai eu le même problème. Et avec Anemone, ce que j'ai fait était:

Dès que j'atteins la limite d'URL que je veux, je lève une exception. Le bloc anémone entier est à l'intérieur d'un bloc begin/rescue.

Dans votre cas spécifique je prendrais une autre approche. Je voudrais télécharger la page que vous souhaitez analyser, et le lier à fakeweb. J'ai écrit une entrée de blog à ce sujet, il ya longtemps, peut-être que cela serait utile: http://blog.bigrails.com/scraper-guide.html

1

Ajoutez ce monkeypatch à votre fichier d'exploration.

module Anemone 
    class Core 
     def kill_threads 
      @tentacles.each { |thread| 
       Thread.kill(thread) if thread.alive? 
      } 
     end 
    end 
end 

Voici un exemple de la façon de l'utiliser après que vous l'avez ajouté à votre file.Then ramper dans le fichier que vous exécutez votre ajouter à votre méthode anemone.on_every_page

@counter = 0 
Anemone.crawl(http://stackoverflow.com, :obey_robots => true) do |anemone| 
    anemone.on_every_page do |page| 
     @counter+= 1 
     if @counter > 10 
      anemone.kill_threads 
     end 
    end 
end 

Source: https://github.com/chriskite/anemone/issues/24