关于scrapy的异步问题,谢谢老师
截图中的代码逻辑,我认为是从起始页,就是第一页开始爬取,爬完第一页后,然后下一页自动加一,爬取第二页,再第三页。四。五。。。依次按页数爬取。
这样没有体现出scrapy的异步特点吧,看不出是并发爬取呀。并发爬取是多个页面同时爬取吗??不知道是不是我理解有误,请老师解答下,谢谢
正在回答
同学,你好,scrapy是依赖于twisted,Twisted是用Python实现的基于事件驱动的网络引擎框架,它是基于事件循环的异步非阻塞网络框架,可以实现爬虫的并发。
1、先我们要了解scarpy的结构:
ENGINE:引擎,框架的核心,其它所有组件在其控制下协同工作。
SCHEDULER:调度器,负责对SPIDER提交的下载请求进行调度。
DOWNLOADER:下载器,负责下载页面(发送HTTP请求/接收HTTP响应)。
SPIDER:爬虫,负责提取页面中的数据,并产生对新页面的下载请求。
MIDDLEWARE:中间件,负责对Request对象和Response对象进行处理。
ITEM PIPELINE:数据管道,负责对爬取到的数据进行处理。
对于我们来说,Spider是最核心的组件,Scrapy爬虫开发是围绕实现Spider展开的。
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也会重新下载。
相似问题
登录后可查看更多问答,登录/注册
- 参与学习 人
- 提交作业 107 份
- 解答问题 1672 个
Python最广为人知的应用就是爬虫了,有趣且酷的爬虫技能并没有那么遥远,本阶段带你学会利用主流Scrapy框架完成爬取招聘网站和二手车网站的项目实战。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星