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
可以看到我们是成功取到了数据,下一步需要考虑的是如何将数据存入数据库。
文章评论