.Tang

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

scrapy中多个pipeline作用:

一个项目可能需要爬取多个网站,根据每个网站的数据量(处理方式)不同,可创建多个管道 pipeline

class SpideranythingPipeline(object):
    def process_item(self, item, spider):
        if spider.name == 'itcast':  # spider为爬虫实例  itcast是爬虫的名字,, 由此可区分多个爬虫
            print(item)
            return item

 

pipeline的方法

mysql

class SpiderSuningBookPipeline(object):
    def process_item(self, item, spider):
        # collection.insert(dict(item))
        sql = """
            insert into book(title,author,download_text,new) values('%s','%s','%s','%s')"""\
              %(
            item['title'],
            item['author'],
            item['download_text'],
            item['new']
)
        print(sql)
        self.cursor.execute(sql)
        return item

    def open_spider(self, spider):
        # 连接数据库
        self.connect = pymysql.connect(
        host='127.0.0.1',
        port=3306,
        db='study',
        user='root',
        passwd='123456',
        charset='utf8',
        use_unicode=True)

        # 通过cursor执行增删查改
        self.cursor = self.connect.cursor()
        self.connect.autocommit(True)

    def close_spider(self, spider):
        self.cursor.close()
        self.connect.close()

 

mongodb

from pymongo import MongoClient


class PracticePipeline(object):
    def process_item(self, item, spider):
        ''' 接受爬虫返回的数据 '''
        pass

    def open_spider(self, spider):
        ''' 爬虫启动的时候调用 '''
        spider.hello = 'world' # 可以给spider添加属性
        # 初始化数据库连接
        client = MongoClient()
        spider.collection = client['SpiderAnything']['hr']

    def close_spider(self, spider):
        ''' 爬虫关闭的时候调用 '''
        pass

 

posted on 2019-04-10 15:28  .Tang  阅读(263)  评论(0编辑  收藏  举报