簡體   English   中英

從Pipeline - Python Scrapy調用Spider的方法

[英]Call a Spider's method from Pipeline - Python Scrapy

這是蜘蛛

class TicketsSpider(scrapy.Spider):

    def __set_last_start_date(self, dateString):
        #code here

這是管道

class TicketsPipeline(object):

    def spider_closed(self, spider):
        spider.__set_last_start_date(spider.lastAdScrapedDate)

    @classmethod
    def from_crawler(cls, crawler):
        pipeline = cls()
        crawler.signals.connect(pipeline.spider_closed, signals.spider_closed)
        return pipeline

我想從spider_closed()方法調用__set_last_start_date()函數。 但是我收到了這個錯誤

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/defer.py", line 149, in maybeDeferred
    result = f(*args, **kw)
  File "build/bdist.linux-x86_64/egg/pydispatch/robustapply.py", line 55, in robustApply
  File "tickets/pipelines.py", line 236, in spider_closed
    spider.__set_last_start_date(spider.lastAdScrapedDate)
AttributeError: 'TicketsSpider' object has no attribute '_TicketsPipeline__set_last_start_date'
2016-12-13 02:49:53 [scrapy] INFO: Dumping Scrapy stats:

我可以向你保證,我可以獲得spider.lastAdScrapedDate但我無法調用spider.__set_last_start_date

具有雙下划線前導的類中的名稱是私有的。

形式__spam的任何標識符(至少兩個前導下划線,最多一個尾隨下划線)在文本上用_classname__spam替換,其中classname是當前類名,其中前導下划線被剝離。

請參閱詳細。

選項1.您可以重命名方法名稱,而不是使用雙下划線前導。

選項2.如果你想保留你的方法名稱,然后以這種方式調用它,但我認為這不是一個好主意:

    def close_spider(self, spider):
        spider._TicketsSpider__set_last_start_date(spider.lastAdScrapedDate)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM