.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补充的主要内容,如果未能解决你的问题,请参考以下文章