我在做一个RSS蜘蛛。我想继续执行 如果当前没有匹配,则spider忽略当前节点 项目...到目前为止,我有这个:
if info.startswith('Foo'):
item['foo'] = info.split(':')[1]
else:
return None
(info是一个字符串,在...之前从xpath清理过来。)
但我得到了这个例外:
exceptions.TypeError: You cannot return an "NoneType" object from a
蜘蛛
那么如何忽略此节点并继续执行?
答案 0 :(得分:12)
parse(response):
#make some manipulations
if info.startswith('Foo'):
item['foo'] = info.split(':')[1]
return [item]
else:
return []
但最好不要使用return,使用yield
或不做任何事情
parse(response):
#make some manipulations
if info.startswith('Foo'):
item['foo'] = info.split(':')[1]
yield item
else:
return
答案 1 :(得分: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