2010-11-29 7 views
3

Ich arbeite, um einen Crawl zu machen, aber bevor ich eine ganze Website crawl, würde ich gerne einen Test von etwa so Seiten schießen. Also dachte ich unten etwas wie funktionieren würde, aber ich erhalte eine NoMethodError bekommen ....Anemone Ruby mit 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' 

Grundsätzlich ich einen Weg zum ersten craw haben wollen nur 10 Seiten, aber ich zu sein scheinen nicht die Grundlagen zu verstehen Hier. Kann mir jemand helfen? Danke !!

Antwort

0

So fand ich die: depth_limit param und das wird in Ordnung sein, aber ich würde es lieber auf # von Links beschränken.

0

Ich habe deine Frage gefunden, während ich nach Anemonen gegoogelt habe.

Ich hatte das gleiche Problem. Und mit Anemone, was ich tat war:

Sobald ich die URL-Grenze, die ich will erreichen, richte ich eine Ausnahme. Der gesamte Anemonenblock befindet sich in einem Start-/Rettungsblock.

In Ihrem Fall würde ich einen anderen Ansatz nehmen. Ich würde die Seite, die Sie analysieren möchten, herunterladen und an fakeweb binden. Ich schrieb einen Blog-Eintrag darüber, vor langer Zeit, vielleicht wäre es nützlich: http://blog.bigrails.com/scraper-guide.html

1

Fügen Sie dieses Monkeypatch zu Ihrer Crawling-Datei. Hier

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

ist ein Beispiel dafür, wie es zu verwenden, nachdem Sie es zu Ihrem kriechen file.Then in der Datei hinzugefügt haben, die Sie hinzufügen, um diese zu Ihrem anemone.on_every_page Verfahren laufen

@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 

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