2010-11-29 29 views
3

我正在努力抓取,但是在抓取整個網站之前,我想拍攝一個測試頁,所以,我想類似下面的工作,但我不斷收到一個nomethoderror ....anemone Ruby with 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' 

基本上我想有辦法第一隻嗉囊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方法在文件中使用它,你已經加入後,你的爬行file.Then爲例

@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 

來源:https://github.com/chriskite/anemone/issues/24