前面已经讲了scrapy框架的创建和运行,包括一些中间件的的设置和使用。 现在开始讲如何通过管道pipelines进行数据的存储,主要讲存储成文件形式。
我们知道创建的scrapy项目有一个pipelines.py的文件,这个文件就是用来存储我们定义的管道处理类的地方。不过要使用pipelines,首先需要在settings.py文件里面配置pipelines。
在setting.py文件里面找到关于pipelines的设置部分,默认设置如下所示。
# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
#ITEM_PIPELINES = {
# 'hello.pipelines.HelloPipeline': 300,
#}
在上面的代码中,‘hello.pipelines.HelloPipeline’
中的hello为项目名(即scrapy项目核心目录名),pipelines代表hello目录下的pipelines.py文件的文件名,HelloPipeline代表对应的pipelines文件里的类。所以‘hello.pipelines.HelloPipeline’
相当于告诉系统pipelines文件在哪里。同时又说明了pipelines文件里面对应的类是什么。该项设置的格式为
“核心目录名称.pipelines文件名.对应类名”
这里我们先讲如何存储到文件里面。所以在pipelines.py文件里面定义一个FilePineline类。 默认配置修改为
ITEM_PIPELINES = {
'hello.pipelines.FilePineline': 300,
}
打开项目里面的pipelines.py文件,里面的类修改为FilePineline,并将代码修改如下。
class FilePineline(object):
# init()为类的初始化方法,开始的时候调用
def init(self):
# 首先用写入的方式创建或者打开一个普通文件用于存储爬取到的数据
self.file = open("/Users/zhouruiyong/Desktop/python/hello/hello/hello.txt","w")
#processitem()为pipelines中的主要处理方法,默认会自动调用
def processitem(self, item, spider):
#设置每行要写的内容
l = str(item["title"]) +"\n"
#此处输出,方便程序的调试
print