python - scrapy多个spider怎么指定pipeline

 花落---守护者 发布于 2022-10-29 00:25

结构是这样的

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,求大神解答
具体源码

2 个回答
  • stackoverflow看到的,直接为每个spider定义不同的pipeline
    http://stackoverflow.com/a/34...

    down vote
    Just remove all pipelines from main settings and use this inside spider.

    This will define the pipeline to user per spider

    class testSpider(InitSpider):

    name = 'test'
    custom_settings = {
        'ITEM_PIPELINES': {
            'app.MyPipeline': 400
        }
    }
    2022-10-30 10:19 回答
  • 你可以在 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 的作者是这么解释的。
    去看看

    2022-10-30 10:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有