Scrapy框架(4):工作流程以及数据流通

一、Scrapy核心组件介绍

1、Scrapy Engine引擎

框架核心,负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,数据传递,触发事务

2、Scheduler调度器

可以简单想象成一个url队列(但实际为request对象)

3、Downloader下载器

下载网页内容,并返回给Spider

4、Spider爬虫

是爬虫逻辑所在的模块,用于从特定的网页中获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler

5、Pipeline管道

处理爬虫从网页中抽取的数据

二、Scrapy框架工作流程

在这里插入图片描述
在这里插入图片描述
①Spiders的yeild将request发送给Scrapy Engine(spider–>start_urls)
②Scrapy Engine对request不会做任何处理只是将request传递给Scheduler
③Scheduler按优先级顺序生成request交给Scrapy Engine
④Scrapy Engine接收到request后,通过Downloader Middlewares(下载中间件)过滤处理后传递给Downloader
⑤Downloader下载到response数据后,又经过Downloader Middlewares(下载中间件)处理后传递给Scrapy Engine
⑥Scrapy Engine接收到response后,传递给Spiders,Spiders通过def parse()解析数据
⑦将解析的items和url发送给Scrapy Engine
⑧Scrapy Engine将items发送给pipeline,将url(request)发送给Scheduler进行递归操作

三、实操

1、zip将同一篇文章的数据聚集在一起

使用zip函数将同一篇文章的作者、发布时间、网址、评论点赞浏览数要对应起来,命名为article_infos(之前的代码:scrapy框架(3):CSS选择器解析数据

article_infos=zip(title,url,name,time,thumbsup,comments,views)

将断点打在Spider的pass上,调试打印第一条数据查看是否有误(注意:运行的是main.py入口文件scrapy框架(2):入口文件
在这里插入图片描述

2、items.py中声明流通字段

每一篇文章是通过元组封装的,元组的特点是不可变。要把每一篇文章的数据封装成一个item对象在框架中流通,要在items.py中声明要流通的字段:title和name

title=scrapy.Field()   # 就是为了存储数据,但不是一般的对象数据,在框架里做了处理
name=scrapy.Field()  # scrapy.Field 占位 不能接收列表,要接收字符串

在这里插入图片描述

3、赋值

在Spider中声明item对象(小驼峰),并将每一篇文章的标题和作者赋值给item对象

# 声明
csdnspiderProjectItem = CsdnspiderProjectItem()  # 查看items.py看类的名字
# 赋值
csdnspiderProjectItem['title']=article_info[0]
csdnspiderProjectItem['name']=article_info[2]

运行打印出所有数据
在这里插入图片描述

4、settings.py中开启ITEM_PIPELINES

要在Scrapy中流通,当然首先需要在settings.py中将ITEM_PIPELINES打开
在这里插入图片描述

5、检查数据是否进入

需要将数据从spider中yield出来,传到piplines.py。断点打在pipelines.py的return item上,调试查看数据是否进入。

yield csdnspiderProjectItem

在这里插入图片描述

在这里插入图片描述
可以看到我们是成功取到了数据,下一步需要考虑的是如何将数据存入数据库。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值