Scrapy 刮板:从刮板上掉落物品
我想从铲运机本身删除一个项目,而不是将这个铲运机的特定删除逻辑添加到管道中,因为这是一个特定的情况 Scrapy具有来自管道的DropItem异常,但如果从刮板引发,则会产生错误:Scrapy 刮板:从刮板上掉落物品,scrapy,Scrapy,我想从铲运机本身删除一个项目,而不是将这个铲运机的特定删除逻辑添加到管道中,因为这是一个特定的情况 Scrapy具有来自管道的DropItem异常,但如果从刮板引发,则会产生错误: #... raise DropItem('Item dropped ' + self.id()) 输出: 2019-11-13 13:27:27 [scrapy.core.scraper] ERROR: Spider error processing <GET http://domain.tld/> (
#...
raise DropItem('Item dropped ' + self.id())
输出:
2019-11-13 13:27:27 [scrapy.core.scraper] ERROR: Spider error processing <GET http://domain.tld/> (referer: http://domain.tld/referer)
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/twisted/internet/defer.py", line 654, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "/usr/local/core/core/spiders/my_spider.py", line 46, in parse get.photos())
scrapy.exceptions.DropItem: Item dropped 35
2019-11-13 13:27:27[scrapy.core.scraper]错误:蜘蛛错误处理(参考:http://domain.tld/referer)
回溯(最近一次呼叫最后一次):
文件“/usr/local/lib/python3.7/site packages/twisted/internet/defer.py”,第654行,在runCallbacks中
current.result=回调(current.result,*args,**kw)
文件“/usr/local/core/core/spider/my_spider.py”,第46行,在parse get.photos()中
scrapy.exceptions.DropItem:项目已删除35
有没有更优雅的方法来处理这种情况?你说的刮板是指蜘蛛回调?Spider回调不能删除项目,相反,它们首先不能生成项目。从管道外部提升
DropItem
是没有意义的,你能解释一下导致这种情况的原因吗?@Gallaecio“蜘蛛回调”是什么意思?情况很简单;从项目中获取多个数据的刮板,如果其中一个不需要,刮板应该删除整个项目,因此我需要避免产生它。我想按照最好的方法来做,而不是引发一个异常。在Spider
子类中,您从一个或多个方法返回或生成项目。在这些方法中,您可以更改代码,使其不返回/放弃要放弃的项目。我明白了,我可以将代码更改为跳过放弃,但我认为Scrapy可能有一个内置的机制来处理此问题,这样我可以在scraper完成后给出的度量中看到该项目已被跳过。这可以通过管道实现,但据我所知,不能通过刮板。你也可以通过爬行器修改统计数据,甚至创建新的统计数据。看见