2010-11-29 3 views
3

나는 크롤링 작업을하고 있지만 전체 웹 사이트를 크롤링하기 전에 한 페이지 정도 테스트 해보고 싶습니다. 그래서 아래 일 것 같은 것을 생각하고 있었다, 그러나 나는 nomethoderror가 계속 .... 곰 끌 루비 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 매개 변수를 발견 했으니 괜찮습니다.하지만 링크 수에 제한하고 싶습니다.

0

내가 말미잘을 검색하는 동안 질문을 찾았습니다.

나는 동일한 문제가있었습니다. 그리고 Anemone과 내가 한 일은 다음과 같습니다.

내가 원하는 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