手写myscrapy(二)

我们看一下scrapy的系统架构设计方法和思路:

模块化设计:

Scrapy采用模块化设计,将整个系统划分为多个独立的模块,包括引擎(Engine)、调度器(Scheduler)、下载器(Downloader)、爬虫(Spider)、项目管道(Item Pipeline)等。每个模块都负责处理特定的任务,并通过标准化的接口与其他模块进行通信。这种设计使得Scrapy的各个部分可以独立开发、测试和扩展,提高了系统的可维护性和可扩展性。

异步IO处理

Scrapy使用Twisted库来实现异步IO处理,这使得Scrapy能够同时处理多个网络请求,大大提高了爬虫的效率。异步IO处理允许Scrapy在等待网络响应的过程中继续执行其他任务,避免了阻塞操作导致的资源浪费。

数据流设计

Scrapy通过引擎(Engine)来控制数据流在系统中的流动。引擎负责接收和处理来自爬虫、调度器和下载器的请求和响应,并根据需要触发相应的事件。数据流的设计使得Scrapy能够灵活地处理各种数据抓取任务,并支持多种数据处理方式,如数据清洗、验证和存储等。

中间件机制

Scrapy提供了下载器中间件(Downloader Middlewares)和爬虫中间件(Spider Middlewares)两种中间件机制。这些中间件可以插入到Scrapy的数据流中,对请求和响应进行预处理和后处理,从而实现对爬虫功能的扩展和定制。中间件机制使得用户可以根据需要添加自定义的代码逻辑,以满足特定的数据抓取需求。

scrapy设计的还是很牛的,但是这么强大的工具,我们学习和使用都需要一定的成本,我们还是写一个简单,易学易用的scrapy;

分析一下核心功能:

  • http网络请求
  • 返回结果的标准化解析
  • 筛选需要的信息保存
  • http 网络请求 我们使用 requests 第三库来实现;
  • 返回结果使用 lxml 的 etree 库来解析;
  • 保存信息目前选择使用excel 和mysql数据库两种方式;

流程图如下:

相关推荐
曲幽6 分钟前
FastAPI单元测试实战:别等上线被喷才后悔,TestClient用对了真香!
python·单元测试·pytest·api·fastapi·web·httpx·testclient·依赖项覆盖
章鱼丸-7 分钟前
DAY34 GPU 训练与类的 call 方法
开发语言·python
小陈工19 分钟前
2026年3月24日技术资讯洞察:边缘AI商业化,Java26正式发布与开源大模型成本革命
java·运维·开发语言·人工智能·python·容器·开源
qq_4160187221 分钟前
Python多线程与多进程:如何选择?(GIL全局解释器锁详解)
jvm·数据库·python
m0_6625779726 分钟前
用Python生成艺术:分形与算法绘图
jvm·数据库·python
MORE_7741 分钟前
leecode100-买卖股票的最佳时期-贪心算法
python·算法·贪心算法
暮冬-  Gentle°1 小时前
用Python制作一个文字冒险游戏
jvm·数据库·python
小小小米粒1 小时前
[特殊字符] 正常部署 AI + 流式输出(Stream)[特殊字符] 为什么会 CPU 炸了?
开发语言·python
站大爷IP1 小时前
Python异步编程:asyncio核心用法与避坑指南
python
m0_587958951 小时前
游戏与图形界面(GUI)
jvm·数据库·python