包含标签 中间件 中的文章

scrapy经验分享-同一项目不同的spider启用不同的配置

在群里经常被问到如何解决同一个爬虫启用不同的piepline的问题,一般的解决通过参数的不同解决这个 def process_item(self, item, spider): self._client.create_index([('msg_id', pymongo.DESCENDING)], background=True) self._client.update_one(filter={'msg_id': item['msg_id']}, update={'$set': dict(item)}, upsert=True) return item 代码中有两个重要的参数item,还有一个spider ,我们打个断点来看看spider 里面的都有些什么 简单点我们可以通过name做逻辑上的判断 if spider.name == 'spider_1': do sth....……

阅读全文

[scrapy]scrapy源码分析–中间件是如何加载的

中间件是scrapy的核心部分,数据的传递,队列的维护,都是靠中间件,所以了解他的生命周期还是很有必要的 https://github.com/scrapy/scrapy/blob/master/scrapy/core/spidermw.py def _add_middleware(self, mw): super(SpiderMiddlewareManager, self)._add_middleware(mw) if hasattr(mw, 'process_spider_input'): self.methods['process_spider_input'].append(mw.process_spider_input) if hasattr(mw, 'process_spider_output'): self.methods['process_spider_output'].insert(0, mw.process_spider_output) if hasattr(mw, 'process_spider_exception'): self.methods['process_spider_exception'].insert(0, mw.process_spider_exception) if hasattr(mw, 'process_start_requests'): self.methods['process_start_requests'].insert(0, mw.process_start_requests) 将中间件的每内置的方法加入到方法链上,注意,这里的数值越小,处理越靠前,下同 https://github.com/scrapy/scrapy/blob/master/scrapy/core/scraper.py 这里就去处理spiderMiddleWare class Scraper(object):……

阅读全文

最近文章

分类

标签

友情链接

其它