我正在使用scrapy 0.20和python 2.7
这是我的代码
def process_spider_output(self, response, result, spider):
print 'process_spider_output'
for r in result:
print 'r type = {0}'.format(type(r))
if isinstance(r, Request):
key = self._get_key(r)
if self.db.has_key(key):
spider.log("Ignoring already visited: %s" % r, level=log.INFO)
print 'Ignoring already visited: {0}'.format(r)
continue
elif isinstance(r, FlexibleItem):
key = self._get_key(response.request)
self.db[key] = str(time.time())
spider.log("Writing to log: %s" % key, level=log.INFO)
print 'Writing to log {0}'.format(s)
yield r
我正在尝试打印r
的类型,我的cmd上的结果是:
r type = <class 'TestSpider.spiders.FlexibleItem.FlexibleItem'>
所以类型是FlexibleItem
但为什么第二个条件永远不会成真?我从未见过第二个条件的打印声明
此图片适合现在正在帮助我的善良用户。
答案 0 :(得分:1)
在这种情况下,它是Ignacio所说的,或者问题的描述不正确。
但为什么第二个条件永远不会成真?我从来没见过 来自第二个条件的打印声明
你确定第二个条件永远不会成真吗?将1/0
放在elif isinstance(r, FlexibleItem):
之后,以确定它。
在任何情况下,找出正在发生的事情的更好方法是使用调试器。将import pdb; pdb.set_trace()
放在第一个if
之前将允许逐步运行脚本并查看发生的情况。
答案 1 :(得分:1)
有两种可能性:
FlexibleItem
实际上不是TestSpider.spiders.FlexibleItem.FlexibleItem
。确保没有两种方法可以导入名称。
TestSpider.spiders.FlexibleItem.FlexibleItem
是Request
的后代。如果是这种情况,则if
语句将为true,并且永远不会评估elif
语句。