在scrapy中完成特定请求后触发函数

在scrapy中完成特定请求后触发函数,scrapy,scrapy-pipeline,Scrapy,Scrapy Pipeline,我在Scrapy中有一个复杂的刮取应用程序,它在多个阶段运行(每个阶段都是调用刮取和解析的下一阶段的函数)。爬行器尝试下载多个目标,每个目标包含大量文件。我需要做的是,在下载目标的所有文件后,调用一些处理这些文件的函数,但它不能部分处理这些文件,它需要同时为目标调用整个文件集。有办法吗?如果您不能等到整个spider完成,那么您必须在一个条目管道中编写一些逻辑,跟踪您所刮取的内容,然后执行一个函数。 下面是一些让您开始使用的逻辑:它跟踪每个目标的刮取项目数,当达到100个时,它将执行target

我在Scrapy中有一个复杂的刮取应用程序,它在多个阶段运行(每个阶段都是调用刮取和解析的下一阶段的函数)。爬行器尝试下载多个目标,每个目标包含大量文件。我需要做的是,在下载目标的所有文件后,调用一些处理这些文件的函数,但它不能部分处理这些文件,它需要同时为目标调用整个文件集。有办法吗?

如果您不能等到整个spider完成,那么您必须在一个条目管道中编写一些逻辑,跟踪您所刮取的内容,然后执行一个函数。 下面是一些让您开始使用的逻辑:它跟踪每个目标的刮取项目数,当达到100个时,它将执行target_complete方法。请注意,您必须在课程项目中填写“目标”字段

from collections import Counter

class TargetCountPipeline(object):
    def __init__(self):
        self.target_counter = Counter()
        self.target_number = 100

    def process_item(self, item, spider):
        target = item['target']
        self.target_counter[target] += 1
        if self.target_counter[target] >= self.target_number:
            target_complete(target)
        return item

    def target_complete(self, target):
        # execute something here when you reached the target

关于
def closed(self,reason):
在您的
pipelines.py
中如何处理?但这只会在spider关闭后运行,对吗?但在这种情况下,我需要类似的东西,但在每一组请求之后,不是整个spider@gangabass,这意味着对于整个spider,这个类将只有一个实例?当运行spider时,将有一个项目管道实例。每一件被刮掉的东西都会通过这个管道。那太好了,我想它会有用的。谢谢你的回复