标签:数据初始化 连接 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()
标签:数据初始化 连接 ret @class 关闭数据库 ini write 调用 str
原文地址:https://www.cnblogs.com/traditional/p/9257870.html