2014-01-31 2 views
1

설명 시나리오 : Scrapy 스파이더는 다양한 레스토랑 웹 사이트의 start_urls 목록에서 식당 메뉴를 긁어 모으기 위해 만들어졌습니다. 각 레스토랑에 대해 메뉴가 발견되면 더 이상 특정 레스토랑 웹 사이트를 계속 크롤링 할 필요가 없습니다. 거미는 (이상적으로) start_url의 큐를 중단하고 다음 레스토랑으로 이동해야합니다.치료 중지 조건

중지 조건이 만족되면 Scrapy가 start_url * 당 요청 대기열의 나머지를 크롤링하지 못하게 할 수 있습니까? 나는 전체 스파이더를 막고 싶지 않고 현재 start_url의 큐를 멈추고 나서 다음 start_url으로 이동하기 때문에 CloseSpider 예외가 적절하다고 생각하지 않습니다.

+0

그런 옵션이 없습니다. 그럼에도 불구하고 시작 URL 당 요청 대기열을 유지하고 메뉴를 찾을 때까지 요청을 계속 처리 할 수 ​​있습니다. – Rolando

답변

1

치료 규칙을 사용하지 마십시오. 당신이 필요 모든 :

start_urls = [ 
     'http://url1.com', 'http://url2.com', ... 
    ] 

def start_requests(self): 
     for url in self.start_urls: 
      yield Request(url, self.parse_url) 

def parse_url(self, response): 
     hxs = Selector(response) 
     item = YourItem() 
     # process data 
     return item 

을 그리고 allowed_domains 목록에 모든 도메인을 추가하는 것을 잊지 마세요.