如何防止蜘蛛爬行管道?

3

@Sjaak Trekhaak有一个“技巧”,可以在管道中设置一个标志,然后在解析器方法中调用CloseSpider,从而有可能通过如何在管道满足条件时立即停止所有蜘蛛和引擎 来停止蜘蛛。但是,我在管道中有以下代码(其中pdate和lastseen是明确定义的日期时间):

class StopSpiderPipeline(object):
    def process_item(self, item, spider):                                       
        if pdate < lastseen:
            spider.close_down = True 

在爬虫中。
def parse_item(self, response):                                             
    if self.close_down:                                                     
        raise CloseSpider(reason='Already scraped')     

我遇到了错误exceptions.AttributeError: 'SyncSpider'对象没有属性'close_down',我错在哪里了?这个问题实际上是由@anicake提出的,但没有得到回答。

谢谢。
1个回答

1
你的爬虫的 close_down 属性是否已经创建?因为它看起来好像没有被创建。
尝试将检查方式更改为 if "close_down" in self.__dict__: 或在你的爬虫的 __init__() 方法中添加 self.close_down = False

谢谢,结果我没有正确初始化 close_down 属性:我在 parse_item 方法中这样做了,它需要在类中。 - eN_Joy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接