我只想在爬网完成时产生一个项目。 我正在尝试通过
def spider_closed(self, spider):
item = EtsyItem()
item['total_sales'] = 1111111
yield item
尽管调用了该函数,但它不会产生任何结果。 刮完后如何生产物品?
答案 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
。我只想展示什么是可能的。