关于scrapy的异步机制

关于scrapy的异步机制

老师好,一直不太明白异步是什么意思,请老师不吝赐教

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学,你好。

1、首先我们要了解scarpy的结构:

ENGINE:引擎,框架的核心,其它所有组件在其控制下协同工作。

SCHEDULER:调度器,负责对SPIDER提交的下载请求进行调度。

DOWNLOADER:下载器,负责下载页面(发送HTTP请求/接收HTTP响应)。

SPIDER:爬虫,负责提取页面中的数据,并产生对新页面的下载请求。

MIDDLEWARE:中间件,负责对Request对象和Response对象进行处理。

ITEM PIPELINE:数据管道,负责对爬取到的数据进行处理。

对于我们来说,Spider是最核心的组件,Scrapy爬虫开发是围绕实现Spider展开的。

http://img1.sycdn.imooc.com//climg/5e7c1ef0098c555005820404.jpg

2、scrapy大致工作流程:

当SPIDER要爬取某URL地址的页面时,需使用该URL构造一个Request对象,提交给ENGINE。

ENGINE将Request对象传给SCHEDULER,SCHEDULER对URL进行去重,按某种算法进行排队,之后的某个时刻SCHEDULER将其出队,将处理好的Request对象返回给ENGINE。

ENGINE将SCHEDULER处理后的Request对象发送给DOWNLOADER下载页面。

DOWNLOADER根据MIDDLEWARE的规则,使用Request对象中的URL地址发送一次HTTP请求到网站服务器,之后用服务器返回的HTTP响应构造出一个Response对象,其中包含页面的HTML文本。DOWNLOADER将结果Resopnse对象传给ENGINE。

ENGINE将Response对象发送给SPIDER的页面解析函数(构造Request对象时指定)进行处理,页面解析函数从页面中提取数据,封装成Item后提交给ENGINE。

ENGINE将Item送往ITEMPIPELINES进行处理,最终以某种数据格式写入文件(csv,json)或者存储到数据库中。

3、关于异步:

Twisted是用Python实现的基于事件驱动的网络引擎框架,scrapy正是依赖于twisted,它是基于事件循环的异步非阻塞网络框架,可以实现爬虫的并发。

例如:我们爬取一个网站的数据,有很多页,总不能等一页爬完才爬下一页吧,要是其中有一页出现故障更是所有的任务全部终止。异步,简单来说,则是所有的任务并发开始,不会因其中一页产生阻塞问题。

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
4.入门主流框架Scrapy与爬虫项目实战
  • 参与学习           人
  • 提交作业       107    份
  • 解答问题       1672    个

Python最广为人知的应用就是爬虫了,有趣且酷的爬虫技能并没有那么遥远,本阶段带你学会利用主流Scrapy框架完成爬取招聘网站和二手车网站的项目实战。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师