What triggers the from_crawler classmethod?
我使用的是Scrapy,我有以下函数管道类:
类dynamicsqllitepipeline(对象):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | @classmethod def from_crawler(cls, crawler): # Here, you get whatever value was passed through the"table" parameter docket = getattr(crawler.spider,"docket") return cls(docket) def __init__(self,docket): try: db_path ="sqlite:///"+settings.SETTINGS_PATH+"\\data.db" db = dataset.connect(db_path) table_name = docket[0:3] # FIRST 3 LETTERS self.my_table = db[table_name] except Exception: # traceback.exec_print() pass def process_item(self, item, spider): try: test = dict(item) self.my_table.insert(test) print('INSERTED') except IntegrityError: print('THIS IS A DUP') |
在我的蜘蛛里,我有:
1 2 3 4 5 6 | custom_settings = { 'ITEM_PIPELINES': { 'myproject.pipelines.DynamicSQLlitePipeline': 600, } } |
号
从最近的一个问题中,我被指出了"cls"变量在Python类中的用途是什么?
如果我正确理解以便实例化管道对象(使用in it函数),它需要一个摘要号。只有在from_crawler类方法运行后,摘要号才可用。但是什么触发了"从爬虫"方法。代码又开始工作了。
类方法的调用方必须具有该类的实例。他们可以通过名字访问它,比如:
1 | DynamicSQLlitePipeline.from_crawler(crawler) |
…或:
1 | sqlitepipeline.DynamicSQLlitePipeline.from_crawler(crawler) |
号
或者,您可以将类对象传递给某人,然后他们将其存储并在以后像这样使用:
1 | pipelines[i].from_crawler(crawler) |
在Scrapy中,根据文档,在框架中注册一组管道的常用方法如下:
1 2 3 4 | ITEM_PIPELINES = { 'myproject.pipelines.PricePipeline': 300, 'myproject.pipelines.JsonWriterPipeline': 800, } |
。
(另请参阅《扩展用户指南》,该指南解释了如何将此应用到零碎的项目中。)
假设您在没有向我们展示的代码中做了类似的事情,在该dict中放入了类似于