【Scrapy】Scrapy教程7——存储数据

news/2025/2/22 18:23:38/

上一节我们对爬虫程序的默认回调函数parse做了改写,提取的数据可以在Scrapy的日志中打印出来了,光打印肯定是不行的,还需要把数据存储,数据可以存到文件,也可以存到数据库,我们一一来看。

存储数据到文件

首先我们看看如何将数据存储到文件,在讲[[【Scrapy】Scrapy教程5——第一个Scrapy项目]]时,我们改写了prase函数,将首页存储到了一个shouye.html文件中,这便是我们的简单的数据存储,但这个存储方式是我们纯手写的代码,存的是整个页面,并非我们想要的数据。
这节主要讲存储数据,我们看下通过Scrapy命令直接存储数据,在这之前我们将parse函数修改下。

def parse(self, response):# 从获取的所有文章中提取链接和标题for article in response.css(".card")[1:]:yield {"title": article.xpath("./a").css("span::text").get(),"link": self.start_urls[0] + article.xpath("./a/@href").get(),}

然后,我们在到命令行中,运行以下命令。

scrapy crawl shouye -o titles.json

上面这条命令会将我们提取的数据存储到titles.json文件中,存储后的效果如下图所示。
在这里插入图片描述

我们会发现,存储的数据没有错,但是被整体存到了一个大的字典中,这不是我想要的结果,我只要数据一行一行的存储下来就好了,我们可以用以下命令。

scrapy crawl shouye -o titles.jsonl

没错,我们换个存储格式,就可以了。
在这里插入图片描述

存储数据到数据库

上面这种方法存储简单的数据可以,对于复杂结构的数据存储,就要引入Items和pipelines了。

Items

我们爬取页面的目标就是将非结构化数据提取为结构化数据,而Item就是Scrapy提供的一个类,用于定义通用输出数据格式的。Scrapy可以将提取的数据,作为Item返回,类似python的键值对。

Item Types

Scrapy通过itemadapter支持字典、Item对象、数据类对象、attrs对象几种Item类型。

  • 字典:类似Python的键值对字典
  • Item对象:Item提供的一个类似dict的API,可以支持更高级的特性
  • dataclass对象:允许定义具有字段名称的项目类,可以指定字段的类型和元数据
  • attrs对象:允许定义具有字段名称的项目类,可以指定字段的类型和元数据

http://www.ppmy.cn/news/1574224.html

相关文章

WPF 中显示图形的方式深度解析

一、引言 Windows Presentation Foundation(WPF)凭借其强大的图形渲染能力,为开发者打造美观、交互性强的桌面应用程序提供了有力支持。在 WPF 里,有多种显示图形的方式,每种方式都有独特的用途和特点。本文将详细介绍 DrawingImage、Shape、Image、GeometryDrawing、Dra…

Oracle定时执行计划任务

标签: 数据化分析, 定时任务,数据库,oracle 分类:02-数据分析工具 在日常工作中,往往有些事情是需要经常重复地做的,例如每天更新业务报表、每天从数据库中提取符合条件的数据、每天将客户关系…

2025.2.21 Restless And Brave

今天是2025年的2月21日,星期五。 距离考研出分还有两天半的时间。 这种时候,我想考的特别好的同学或者考的特别差的同学都不会太焦虑,只有我这种考的不上不下的人才会焦虑。 我曾不止一次的想过如何面对失败,但每每想到这个问题…

Spring AI如何调用Function Calling

在 AI 智能体开发的过程中,RAG(Retrieval-Augmented Generation) 和 功能调用(Function Calling) 已经成为两种至关重要的模式。RAG 通过结合检索技术和生成模型的强大能力,使智能体能够实时从外部数据源获…

从CNN到Transformer:遥感影像目标检测的技术演进(矿产勘探、精准农业、城市规划、林业测量、军事目标识别和灾害评估等)

在遥感影像分析领域,目标检测一直是研究热点之一。随着高分辨率对地观测系统的不断发展,遥感影像的分辨率和数据量呈爆发式增长,如何高效、准确地从海量数据中提取有用信息,成为了一个亟待解决的问题。近年来,深度学习…

游戏引擎学习第111天

仓库:https://gitee.com/mrxiao_com/2d_game_2 将调试相机稍微拉远一点 今天的任务是查看地面块的相关内容。首先,在开始之前,决定将调试摄像头稍微拉远一些,因为希望能够看到粉色区域的整体情况。 在渲染组中,昨天介绍了一个概…

游戏引擎学习第107天

仓库:https://gitee.com/mrxiao_com/2d_game_2 回顾我们之前停留的位置 在这段内容中,讨论了如何处理游戏中的三维效果,特别是如何处理额外的“Z层”。由于游戏中的艺术资源是位图而不是3D模型,因此实现三维效果变得非常具有挑战性。虽然可…

一款社交媒体中查用户名的工具

简介 追踪 400 多个社交网络中的用户名社交媒体账户以查找账户 安装 # python环境 pip安装 pip install sherlock-project # Mac环境 brew安装 brew install sherlock # docker安装 docker pull sherlock/sherlock 使用方式 ->$ sherlock -h usage: sherlock [-h] [-…