Scrapy源码阅读分析_1_整体框架和流程介绍

 

From:https://blog.csdn.net/weixin_37947156/article/details/74435304

Scrapy github 下载地址:https://github.com/scrapy/scrapy

 

 

介绍

 

Scrapy是一个基于Python编写的一个开源爬虫框架,它可以帮你快速、简单的方式构建爬虫,并从网站上提取你所需要的数据。

这里不再介绍Scrapy的安装和使用,本系列主要通过阅读源码讲解Scrapy实现思路为主。

如果有不懂如何使用的同学,请参考官方网站或官方文档学习。

------------------------------------------------------------------------------------------
scrapy 中文文档 和 scrapy 英文文档参照看。因为中文文档比较老,英文文档是最新的。
scrapy 英文文档:https://doc.scrapy.org/en/latest
scrapy 中文文档:http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html
高性能爬虫 Scrapy 框架:https://www.cnblogs.com/wwg945/articles/9021888.html
------------------------------------------------------------------------------------------

简单来说构建和运行一个爬虫只需完成以下几步:

  1. 使用 scrapy startproject spider_project 创建爬虫模板或自己编写爬虫脚本
  2. 爬虫类 继承 scrapy.Spider,重写 parse 方法
  3. parse 方法中 yield 或 return 字典、Request、Item
  4. 使用 scrapy crawl <spider_name>scrapy runspider <spider_file.py>运行

经过简单的几行代码,就能采集到某个网站下一些页面的数据,非常方便。

但是在这背后到底发生了什么?Scrapy到底是如何帮助我们工作的呢?

 

 

 

架构

 

来看一看 Scrapy 的架构图:

 

 

 

核心组件

 

Scrapy有以下几大组件:

  1. Scrapy Engine:核心引擎,负责控制和调度各个组件,保证数据流转;
  2. Scheduler:负责管理任务、过滤任务、输出任务的调度器,存储、去重任务都在此控制;
  3. Downloader:下载器,负责在网络上下载网页数据,输入待下载URL,输出下载结果;
  4. Spiders:用户自己编写的爬虫脚本,可自定义抓取意图;
  5. Item Pipeline:负责输出结构化数据,可自定义输出位置;

除此之外,还有两大中间件组件:

  1. Downloader middlewares:介于引擎和下载器之间,可以在网页在下载前、后进行逻辑处理;
  2. Spider middlewares:介于引擎和爬虫之间,可以在调用爬虫输入下载结果和输出请求/数据时进行逻辑处理;

 

 

 

数据流转

 

按照架构图的序号,数据流转大概是这样的:

  1. 引擎从自定义爬虫中获取初始化请求(也叫种子URL);
  2. 引擎把该请求放入调度器中,同时引擎向调度器获取一个待下载的请求(这两部是异步执行的);
  3. 调度器返回给引擎一个待下载的请求;
  4. 引擎发送请求给下载器,中间会经过一系列下载器中间件;
  5. 这个请求通过下载器下载完成后,生成一个响应对象,返回给引擎,这中间会再次经过一系列下载器中间件;
  6. 引擎接收到下载返回的响应对象后,然后发送给爬虫,执行自定义爬虫逻辑,中间会经过一系列爬虫中间件;
  7. 爬虫执行对应的回调方法,处理这个响应,完成用户逻辑后,会生成结果对象或新的请求对象给引擎,再次经过一系列爬虫中间件;
  8. 引擎把爬虫返回的结果对象交由结果处理器处理,把新的请求对象通过引擎再交给调度器;
  9. 从1开始重复执行,直到调度器中没有新的请求处理;

 

 

 

核心组件交互图

 

我在读完源码后,整理出一个更详细的架构图,其中展示了更多相关组件的细节:

这里需要说明一下图中的Scrapyer,其实这也是在源码的一个核心类,但官方架构图中没有展示出来,这个类其实是处于EngineSpidersPipeline之间,是连通这3个组件的桥梁,后面在文章中会具体讲解。

 

 

 

核心类图

 

涉及到的一些核心类如下:

其中标没有样式的黑色文字是类的核心属性黄色样式的文字都是核心方法

可以看到,Scrapy的核心类,其实主要包含5大组件、4大中间件管理器、爬虫类和爬虫管理器、请求、响应对象和数据解析类这几大块。

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Waymo正式向真正“无人车”迈进,申请DMV远程监控许可证

作者 &#xff1a; DudeWaymo 又向前迈出一大步&#xff0c;真正迈向“无人车”&#xff0c;测试的自动驾驶车辆将不配备安全驾驶员。据报道&#xff1a;Waymo已经向加州车管局提出了申请&#xff0c;Waymo官方也证实了媒体报道&#xff0c;而DMV方面称&#xff0c;在申请提交后…

或者是修改服务器时间,修改云服务器时间设置

修改云服务器时间设置 内容精选换一换云服务器的系统盘在创建云服务器时自动创建并挂载&#xff0c;无需单独购买。数据盘可以在购买云服务器的时候一同购买&#xff0c;由系统自动挂载给云服务器。也可以在购买了云服务器之后&#xff0c;单独购买云硬盘并挂载给云服务器。本节…

Lambda 表达式详解~Streams API~规约操作

上一节介绍了部分Stream常见接口方法&#xff0c;理解起来并不困难&#xff0c;但Stream的用法不止于此&#xff0c;本节我们将仍然以Stream为例&#xff0c;介绍流的规约操作。 规约操作&#xff08;reduction operation&#xff09;又被称作折叠操作&#xff08;fold&#x…

Scrapy源码阅读分析_2_启动流程

From&#xff1a;https://blog.csdn.net/weixin_37947156/article/details/74436333 使用 PyCharm 打开下载好的 Scrapy 源码&#xff08;github&#xff1a;https://github.com/scrapy/scrapy&#xff09; scrapy命令 当用 scrapy 写好一个爬虫后&#xff0c;使用 scrapy craw…

重磅!这可能是史上最全的AI产业链地图了

来源&#xff1a;智东西摘要&#xff1a;信通院最新发布全球人工智能产业地图&#xff0c;从底层技术到垂直应用&#xff0c;盘点人工智能发展态势。这年头&#xff0c;没挂上AI的名号&#xff0c;都不好意思说自己是旗舰机。德勤也预测到&#xff1a;2023年&#xff0c;人工智…

2018年医疗人工智能技术与应用白皮书

来源&#xff1a;互联网医疗健康产业联盟【导读】2017 年医疗人工智能发展迅速&#xff0c;产业格局风起云涌。人工智能在医疗领域中的应用已非常广泛&#xff0c;包括医学影像、临床决策支持、语音识别、药物挖掘、健康管理、病理学等众多领域。本白皮书梳理和研究国际、国内医…

Scrapy源码阅读分析_3_核心组件

From&#xff1a;https://blog.csdn.net/weixin_37947156/article/details/74481758 这篇这要是关于核心组件&#xff0c;讲解这些核心组件初始化都做了哪些工作。包括&#xff1a;引擎、下载器、调度器、爬虫类、输出处理器 等的初始化。每个核心组件下其实都包含一些小的组件…

微信服务器向公众号推送消息或事件后,微信服务器向公众号推送消息或事件后,得到的回应不合法?...

呼啦08-04加粗标红插入代码插入链接插入图片上传视频请 登录 后发表内容关闭新增或编辑超链接链接地址关闭插入视频视频链接Appid: wxd4170daab0213d6a昵称: 大都会官微UAT时间: 2021-08-04 11:03:44内容: 微信服务器向公众号推送消息或事件后&#xff0c;得到的回应不合法次数…

Lambda 表达式详解~Stream Pipelines

前面我们已经学会如何使用Stream API&#xff0c;用起来真的很爽&#xff0c;但简洁的方法下面似乎隐藏着无尽的秘密&#xff0c;如此强大的API是如何实现的呢&#xff1f;比如Pipeline是怎么执行的&#xff0c;每次方法调用都会导致一次迭代吗&#xff1f;自动并行又是怎么做到…

报告:采用人工智能并不意味着成功

来源&#xff1a;199IT互联网数据中心毕马威发布了新报告“采用人工智能并不意味着成功”&#xff0c;分析了2018年的主要趋势。采用数字化劳动&#xff08;Digital labor&#xff09;、机器人流程自动化、人工智能、机器学习和其他创新技术解决方案是2018年和未来几年的流行趋…

Scrapy源码阅读分析_4_请求处理流程

From&#xff1a;https://blog.csdn.net/weixin_37947156/article/details/74533108 运行入口 还是回到最初的入口&#xff0c;在Scrapy源码分析&#xff08;二&#xff09;运行入口这篇文章中已经讲解到&#xff0c;在执行scrapy命令时&#xff0c;调用流程如下&#xff1a; …

普通电阻触摸屏多点触摸低成本解决方 转载

苹果公司iPhone的成功将多点触摸技术推到了一个前所未有的高度&#xff0c;经典的弹钢琴应用程序可以支持超过5点的同时触摸&#xff0c;虽然这一性能并不见得有太多的实用价值&#xff0c;但绝对带给了用户技术无限领先的震撼感。苹果公司的iPhone采用电容屏和他们的专利技术来…

Gartner:2018年前沿技术预测

本文转载自科技中国&#xff0c;作者&#xff1a;孟海华(上海市科学学研究所)&#xff0c;首发刊载于《科技中国》杂志2018年3月 第3期 预测。一、人工智能全球领先的信息技术研究与顾问公司Gartner认为&#xff0c;2018年将是人工智能大众化应用的开始&#xff0c;将影响到企业…

@font-face

问题描述&#xff1a; 产品展示的界面上有个产品编号&#xff0c;由后台程序动态生成&#xff0c;如图 而"875"的字体是特殊字体&#xff0c;如果客户端系统上没有安装该特殊字体&#xff0c;就达不到原设计效果。 解决办法(我认为的三种)&#xff1a;1。通过FLASH实…

扎克伯格|在美国国会数据门听证会上的证词-中英文全文

来源&#xff1a;网络法前哨美国时间2018年4月10日至11日&#xff0c;Facebook公司CEO马克-扎克伯格&#xff08;Mark Zuckerberg&#xff09;将在美国国会就“剑桥分析丑闻”作证。4月10日&#xff0c;扎克伯格已经参加了美国参议院司法与商业委员会举行的听证会。4月11日&…

Scrapy-Link Extractors(链接提取器)

Link Extractors 中文文档&#xff1a;https://scrapy-chs.readthedocs.io/zh_CN/1.0/topics/link-extractors.html Link Extractors 英文文档&#xff1a;http://doc.scrapy.org/en/latest/topics/link-extractors.html 利用爬虫Scrapy中的LinkExtractor&#xff08;链接提取器…

Java8 Stream详解~Stream 创建

Stream可以通过集合数组创建。 1、通过 java.util.Collection.stream() 方法用集合创建流 List<String> list Arrays.asList("a", "b", "c"); // 创建一个顺序流 Stream<String> stream list.stream(); // 创建一个并行流 Strea…

一张图:AI领域里各领风骚的BAT三巨头

来源&#xff1a;网络大数据近日&#xff0c;国内人工智能初创企业商汤科技完成6亿美元融资&#xff0c;由阿里巴巴集团领投&#xff0c;创下目前为止人工智能领域最大的一笔单轮融资。其实在过去两年里&#xff0c;BAT(百度、阿里巴巴、腾讯)就已在人工智能领域里纷纷交出了漂…

Scrapy - Request 和 Response(请求和响应)

Requests and Responses&#xff1a;http://doc.scrapy.org/en/latest/topics/request-response.html Requests and Responses&#xff08;中文版&#xff09;&#xff1a;https://scrapy-chs.readthedocs.io/zh_CN/latest/topics/request-response.html 请求 和 响应 通常&am…

一篇文章了解生物特征识别六大技术

来源&#xff1a;赵松科学网博客生物识别技术&#xff0c;通过计算机与光学、声学、生物传感器和生物统计学原理等高科技手段密切结合&#xff0c;利用人体固有的生理特性&#xff08;如指纹、脸象、虹膜等&#xff09;和行为特征&#xff08;如笔迹、声音、步态等&#xff09;…