码迷,mamicode.com
首页 > 其他好文 > 详细

(6).pipline补充

时间:2018-07-03 15:05:29      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:数据初始化   连接   ret   @class   关闭数据库   ini   write   调用   str   

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don‘t forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

# pipline这个类下面有很多方法
# 比方说我们想将数据写入文件
# 如果定义在process_item里面,那么爬虫每来一次,都要重复打开一次文件
# 因此类下面还有其他的方法
class ChoutiPipeline(object):

    def __init__(self, conn_str):  # 数据初始化
        self.conn_str = conn_str

    @classmethod
    def from_crawler(cls, crawler):  # 创建对象,读取配置文件
        # 比方说,我读取数据库连接
        # 这里crawler封装了settings,就是我们的配置文件,然后可以直接读取里面的内容
        # 本质上就是将配置文件打开,读取里面所有的全局变量
        # 因此我们定义的变量一定要大写,否则就读不到了
        conn_str = crawler.settings.get(‘DB_CONNECTION‘)
        # 返回一个类的实例对象,并将conn_str作为参数传给__init__
        return cls(conn_str)

    def open_spider(self):
        ‘‘‘
        爬虫开始的时候,被调用
        :return:
        ‘‘‘
        # 因此在这里我们可以选择打开文件,或者打开数据库
        self.f = open(‘spider.txt‘, ‘a+‘, encoding=‘utf-8‘)

    def process_item(self, item, spider):
        self.f.write("xxxxx")
        # 我们之前也说过,可以有多个pipline,但是都要在配置文件中进行配置
        ‘‘‘
        ITEM_PIPELINES = {
            ‘chouti.pipelines.ChoutiPipeline‘: 300,
        }
        ‘‘‘
        # 问题是当我一个pipline执行完,后面的(数字小-->权重低)pipline要不要执行?
        # 这个问题不是由scrapy决定,而是我们说了算
        # 这个process_item是可以有返回值的
        return item  # 如果return item,那么说明会让之后pipline也执行
        # 但是不想让后面的pipline执行的话,不要什么都不写或者return None
        # 而是要抛出一个异常
        ‘‘‘
        from scrapy.exceptions import DropItem
        return DropItem()
        ‘‘‘


    def close_spider(self):
        ‘‘‘
        爬虫结束时,调用
        :return:
        ‘‘‘
        # 在这里我们可以关闭文件,或者关闭数据库
        self.f.close()

  

(6).pipline补充

标签:数据初始化   连接   ret   @class   关闭数据库   ini   write   调用   str   

原文地址:https://www.cnblogs.com/traditional/p/9257870.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!