2011-02-18 3 views
4

나는 RSS 거미를하고 있습니다.Scrapy : 항목을 건너 뛰고 실행을 계속합니다.

 if info.startswith('Foo'): 
      item['foo'] = info.split(':')[1] 
     else: 
      return None 

(정보 문자열입니다 : 현재 항목에서 일치가없는 경우 나는 지금까지이있어 ... 현재 노드를 무시 거미의 실행을 계속하려면 그

) ... 전에 XPath는에서 소독 것 그러나 나는이 예외 받고 있어요 :

그래서 어떻게 igno 수

exceptions.TypeError: You cannot return an "NoneType" object from a 

거미 이 노드를 다시 실행하고 실행을 계속 하시겠습니까?

답변

10
parse(response): 
    #make some manipulations 
    if info.startswith('Foo'): 
      item['foo'] = info.split(':')[1] 
      return [item] 
     else: 
      return [] 

그러나 더 나은이 내가 구문 분석하는 동안 항목을 건너했다 때 알아 낸 문서화되지 않은 방법이지만, 수익을 사용 yield를 사용하거나 아무것도에게

parse(response): 
    #make some manipulations 
    if info.startswith('Foo'): 
      item['foo'] = info.split(':')[1] 
      yield item 
     else: 
      return 
+0

반환 [] 잘 작동하는 것 같습니다. 감사합니다. – anders

1

을하지 콜백 함수 외부 동안 .

구문 분석 중에 어느 곳에서나 StopIteration을 올리기 만하면됩니다.

class MySpider(Spider): 
    def parse(self, response): 
     value1 = parse_something1() 
     value2 = parse_something1() 
     yield Item(value1, value2) 

    def parse_something1(self): 
     try: 
      return get_some_value() 
     except Exception: 
      self.skip_item() 

    def parse_something2(self): 
     if something_wrong: 
      self.skip_item() 

    def skip_item(self): 
     raise StopIteration 
관련 문제