Scrapy。 spider_close调用后如何产生项目?

时间:2018-08-08 18:21:55

标签: scrapy

我只想在爬网完成时产生一个项目。 我正在尝试通过

def spider_closed(self, spider):
    item =  EtsyItem()
    item['total_sales'] = 1111111
    yield item 

尽管调用了该函数,但它不会产生任何结果。 刮完后如何生产物品?

2 个答案:

答案 0 :(得分:0)

哎呀,恐怕spider_closed用于拆除。我想您可以通过将一些自定义内容附加到Pipeline来对项目进行后处理来实现。

答案 1 :(得分:0)

根据您要执行的操作,可能会有针对此目的的骇客解决方案。

您可能要考虑使用spider_closed之前触发的spider_idle信号,而不是spider_closed。空闲和关闭之间的区别是spider_idle 允许执行请求,然后其中可能包含回调或错误返回以产生所需的项目。

蜘蛛内部课程:

@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
    # ...
    crawler.signals.connect(spider.spider_idle, signal=signals.spider_idle)
    return spider

# ...

def yield_item(self, response):
    yield MyItem(name='myname')


def spider_idle(self, spider):
    req = Request('https://fakewebsite123.xyz',
        callback=lambda:None, errback=self.yield_item)
    self.crawler.engine.crawl(req, spider)

但是这会带来一些副作用,因此我不鼓励任何人在生产中使用它,例如,最终请求将引发DNSLookupError。我只想展示什么是可能的。