.pipline补充

Posted traditional

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.pipline补充相关的知识,希望对你有一定的参考价值。

# -*- 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()

  

以上是关于.pipline补充的主要内容,如果未能解决你的问题,请参考以下文章

VSCode 配置 用户自定义代码片段 自定义自动代码补充

Piplin 安装部署迁移和配置使用笔记

关于scrapy的piplines

jenkins pipline和jenkinsfile

jenkins pipline 和 jenkinsfile

vs 2010代码片段