scrapy框架的保存文件的几种方式

在scrapy创建成功后,在自动生成的目录中会有items.py文件和pipelines.py文件,这两个都是可以用来保存文件的。下面就来写一下这两个文件的保存文件的方式。

使用items.py文件保存

  • 第一步:
    • 在items.py文件中创建爬虫爬取数据的模型
title = scrapy.Field()
  • 第二步:
    • 在创建的爬虫文件中实例化模型并使用模型
item = AncientPoemsItem()
item['title'] = response.xpath('//div[@class="left"]/div[@class="sons"]/div[*].a[2]/text()').get()
  • 第三步:
    • 运行命令并保存数据

 

scrapy crawl app -o app.json

app是爬虫名字,-o表示使用items.py文件进行保存,app.json表示保存后的名字和格式。并且该命令支持以下的格式:

json、jsonlines、jl、csv、xml、marshal、pickle

使用pipelines.py文件保存

该文件又被称为项目管道,在一个项目被蜘蛛抓取之后,它被发送到项目管道,该管道通过几个按顺序执行的组件来处理它。每个项管道组件(有时称为“项管道”)都是一个实现简单方法的Python类。必须实现以下方法:

  • process_item(selfitemspider)
    • 对每个项管道组件调用此方法。
    • 该方法必须返回item
    • 参数item表示爬虫爬取的数据
    • 参数spider表示爬取项目的蜘蛛

此外,它们还可以实现以下方法:

  • open_spider(selfspider)
    • 当spider打开时调用此方法。
    • 参数spider表示爬取项目的蜘蛛
  • close_spider(selfspider)
    • 当spider关闭时调用此方法。
    • 参数spider表示爬取项目的蜘蛛
  • from_crawler(clscrawler)
    • 如果存在,则调用此ClassMethod从 Crawler . 它必须返回管道的新实例。爬虫对象提供对所有零碎核心组件(如设置和信号)的访问;它是管道访问它们并将其功能连接到零碎的一种方式。
    • 参数crawler表示使用此管道的爬虫程序

以下就使用该文件将数据保存到MoggoDb数据库中为例

第一步:在settings.py文件中设置连接参数

MONGO_URI = "127.0.0.1"  # 数据库地址
MONGO_DATABASE = "古诗词"  # 需要保存到哪个的数据库名

第二步:编写项目管道 

class MongoPipeline:
    collection_name = 'scrapy_items'  # 数据库集合名

    # 从settings文件中获取参数,并交由__init中进行参数化
    @classmethod
    def from_crawler(cls, crawler):
        return cls(
            mongo_uri=crawler.settings.get('MONGO_URI'),
            mongo_db=crawler.settings.get('MONGO_DATABASE')
        )

    # 初始化参数
    def __init__(self, mongo_uri, mongo_db):
        self.mongo_uri = mongo_uri
        self.mongo_db = mongo_db

    # 连接数据库
    def open_spider(self, spider):
        self.client = pymongo.MongoClient(self.mongo_uri)
        self.db = self.client[self.mongo_db]

    # 对数据进行保存
    def process_item(self, item, spider):
        self.db[self.collection_name].insert_one(dict(item))
        return item

    # 关闭和数据库的连接
    def close_spider(self, spider):
        self.client.close()

第三步:开启项目管道

在settings.py文件中

ITEM_PIPELINES = {
    'Ancient_poems.pipelines.MongoPipeline': 300,
}

键名为项目管道的类名,值为一个数字,数字越大,表示该管道被调用的优先级越低,一般该数字定义为0-1000范围内。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HHYZBC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值