原创文章,链接:http://blog.csdn.net/u012150179/article/details/38226477
在scrapy使用过程中,很多情况下需要根据实际需求定制自己的扩展,小到实现自己的pipelines,大到用新的scheduler替换默认的scheduler。
扩展可以按照是否需要读取crawler大致分为两种,对于不需要读取的,比如pipelines的编写,只需要实现默认的方法porcess_item。需要读取的,如scheduler的编写又存在另外的方式。
这种处理起来比较简单,一般是根据scrapy的signals实现相应的处理。具体实现可见文档pipelines的编写方法。
def from_settings(cls, settings): persist = settings.get('SCHEDULER_PERSIST', SCHEDULER_PERSIST) queue_key = settings.get('SCHEDULER_QUEUE_KEY', QUEUE_KEY) queue_cls = load_object(settings.get('SCHEDULER_QUEUE_CLASS', QUEUE_CLASS)) dupefilter_key = settings.get('DUPEFILTER_KEY', DUPEFILTER_KEY) idle_before_close = settings.get('SCHEDULER_IDLE_BEFORE_CLOSE', IDLE_BEFORE_CLOSE) server = connection.from_settings(settings) return cls(server, persist, queue_key, queue_cls, dupefilter_key, idle_before_close)
def from_crawler(cls, crawler): instance = cls.from_settings(crawler.settings) return instance
想pipelines中的process_item一样,有些函数是此类型组建所必需的,整个框架在执行时会使用到次函数,所以必须加以实现。如scheduler中的enqueue_request、next_request等函数。
最难处理的也是第iii种,这需要全局了解scrapy运行逻辑,函数调用关系等。比较简单的方式是按照原组件的函数功能,函数返回值等根据自己编写的扩展的功能重新实现。就是照葫芦画瓢。
scrapy内data stream在其文档的架构上已经说明,但是转化到代码上好难找啊。ctrl+shift+f可以全局查找字符的出现。右上角的放大镜貌似只能找函数。
原创文章,链接:http://blog.csdn.net/u012150179/article/details/38226477