Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scrapy 刮板:从刮板上掉落物品_Scrapy - Fatal编程技术网

Scrapy 刮板:从刮板上掉落物品

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/> (

我想从铲运机本身删除一个项目,而不是将这个铲运机的特定删除逻辑添加到管道中,因为这是一个特定的情况

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/> (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完成后给出的度量中看到该项目已被跳过。这可以通过管道实现,但据我所知,不能通过刮板。你也可以通过爬行器修改统计数据,甚至创建新的统计数据。看见