首页 > scrapy多个spider怎么指定pipeline

scrapy多个spider怎么指定pipeline

结构是这样的

maple/
├── __init__.py
├── items.py
├── models.py
├── pipelines.py
├── settings.py
└── spiders
    ├── news.py
    └── __init__.py

news.py

class Spider(scrapy.spiders.Spider):
    name = 'news'

class BsSpider(scrapy.spiders.Spider):
    name = 'bsnews'

models.py(使用sqlalchemy)有News(base)BsNews(base)两个表
items.pyNewsItem(scrapy.Item)BsNewsItem(scrapy.Item)
请教pipelines.py应该怎么写?
只有一个Spider时,scrapy crawl news

       def process_item(self, item, spider):
        exsit_url = self.session.query(News.url).\
            filter_by(url=item['url']).first()
        if not exsit_url:
            news = News()
            news.title = item['title']
            news.url = item['url']
            news.time = item['time']
            news.content = item['content']
             self.session.add(news)
             self.session.commit()

能够正常运行
现在我要运行scrapy crawl bsnews如何指定存储的表为BsNews?
第一次接触scrapy,求大神解答
具体源码


你可以在 pipeline 里判断是哪个爬虫的结果:

def process_item(self, item, spider):
    if spider.name == 'news':
        #这里写存入 News 表的逻辑
        news = News()
        ...(省略部分代码)
        self.session.add(news)
        self.session.commit()
     elif spider.name == 'bsnews':
        #这里写存入 News 表的逻辑
        bsnews = BsNews()
        ...(省略部分代码)
        self.session.add(bsnews)
        self.session.commit()
        
      return item

对于这种多个爬虫在一个工程里的,需要不同爬虫在 pipeline 里使用不同逻辑的问题 scrapy 的作者是这么解释的。
去看看

【热门文章】
【热门文章】