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


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

    使用items.py文件保存

    • 第一步:
      • 在items.py文件中创建爬虫爬取数据的模型
    title = scrapy.Field()
    • 第二步:
      • 在创建的爬虫文件中实例化模型并使用模型
    1. item = AncientPoemsItem()
    2. 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文件中设置连接参数

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

    第二步:编写项目管道 

    1. class MongoPipeline:
    2. collection_name = 'scrapy_items' # 数据库集合名
    3. # 从settings文件中获取参数,并交由__init中进行参数化
    4. @classmethod
    5. def from_crawler(cls, crawler):
    6. return cls(
    7. mongo_uri=crawler.settings.get('MONGO_URI'),
    8. mongo_db=crawler.settings.get('MONGO_DATABASE')
    9. )
    10. # 初始化参数
    11. def __init__(self, mongo_uri, mongo_db):
    12. self.mongo_uri = mongo_uri
    13. self.mongo_db = mongo_db
    14. # 连接数据库
    15. def open_spider(self, spider):
    16. self.client = pymongo.MongoClient(self.mongo_uri)
    17. self.db = self.client[self.mongo_db]
    18. # 对数据进行保存
    19. def process_item(self, item, spider):
    20. self.db[self.collection_name].insert_one(dict(item))
    21. return item
    22. # 关闭和数据库的连接
    23. def close_spider(self, spider):
    24. self.client.close()

    第三步:开启项目管道

    在settings.py文件中

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

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

  • 相关阅读:
    实践2:github管理代码仓库,包含用webpack打包项目
    笔试强训Day5
    deepstream中Gst-nvmsgconv和Gst-nvmsgbroker两个插件的作用和关系
    OpenCV中的例程检测方框的代码报错问题修改
    WPF控件8
    【Android】adjustViewBounds 的理解和使用
    PixiJS源码分析系列:第二章 渲染在哪里开始?
    java毕业设计—— 基于java+javaEE+jsp的项目管理系统设计与实现(毕业论文+程序源码)——项目管理系统
    淘客APP开发定制系统推荐
    知识蒸馏算法汇总
  • 原文地址:https://blog.csdn.net/HHYZBC/article/details/126566352