关于scrapy的异步问题,谢谢老师

关于scrapy的异步问题,谢谢老师

截图中的代码逻辑,我认为是从起始页,就是第一页开始爬取,爬完第一页后,然后下一页自动加一,爬取第二页,再第三页。四。五。。。依次按页数爬取。

这样没有体现出scrapy的异步特点吧,看不出是并发爬取呀。并发爬取是多个页面同时爬取吗??不知道是不是我理解有误,请老师解答下,谢谢



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

正在回答

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

1回答

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

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

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

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

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

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

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

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

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

http://img1.sycdn.imooc.com//climg/5ff593bb094d083705410381.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、我们看到的只是表面的执行过程,并不是scrapy框架内部的执行过程。例如:我们爬取一个网站的数据,有很多页,总不能等一页爬完才爬下一页吧,要是其中有一页出现故障而是所有的任务全部终止。异步,简单来说,则是所有的任务并发开始,不会因其中一页产生阻塞问题,对于下载失败的请求,scrapy也会重新下载。

  • 慕姐0286248 提问者 #1

    意思是:代码的逻辑还是这样一页一页的爬,但是scrapy内部真正执行的却是并发的多个页面同时爬取的一个过程?这里理解对吗?

    2021-01-06 18:48:55
  • 好帮手慕美 回复 提问者 慕姐0286248 #2

    同学,你好, 同学的理解是正确的,祝学习愉快~~~~

    2021-01-06 19:09:24
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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