2010-11-29 3 views
3

私はクロールをしていますが、私はウェブサイト全体をクロールする前に、to-to-pageのテストを打ちたいと思います。だから私は、以下のようなものは、仕事と考えていたが、私はnomethoderrorを得続ける....アネモネfocus_crawlを使ったRuby

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' 

は基本的に私は、最初のクローのみ10ページへの道を持つようにしたいが、私は基本を理解していないように見えますここに。誰かが私を助けることができますか? ありがとうございます!

答えて

0

私は:depth_limit paramを見つけましたが、それは問題ありませんが、リンクの数に制限します。

0

私はアネモネのためにグーグルであなたの質問を見つけました。

私は同じ問題を抱えていました。そして、アネモネと私は何をしました:

私が望むURLの限界に達すると、私は例外を提起します。アネモネ全体のブロックは、開始/救助ブロック内にあります。

具体的には別のアプローチをとっています。あなたが解析したいページをダウンロードし、fakewebにバインドします。私は長いこと前にブログの記事を書いたが、役に立つかもしれない。http://blog.bigrails.com/scraper-guide.html

1

このmonkeypatchをあなたのクロールファイルに加える。ここで

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

あなたがあなたの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 
にこのアドインを実行しているファイルで、あなたのクロールfile.Thenにそれを追加した後にそれを使用する方法の例です。

出典:https://github.com/chriskite/anemone/issues/24

関連する問題