手写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数据库两种方式;

流程图如下:

相关推荐
大可不必了3 小时前
03 函数定义和调用
开发语言·python
承渊政道4 小时前
【Python编程—从入门到实践】(记分与闯关:用Python+Pygame,打造越战越精彩的太空大战!)
开发语言·python·pycharm·游戏程序·pygame
爱学习的程序媛4 小时前
Python常用框架梳理
开发语言·后端·python·ai·web·后端框架·python框架
imgsq4 小时前
GESP Python 一到四级:备考路线与真题特点
python·青少年编程
eggwyw6 小时前
Anaconda安装卸载的详细流程指南
开发语言·python
2601_967979126 小时前
纯手写:Python安装pip完整教程,搞了几小时,终于成功
python·教程·pip·安装·包管理
Norna7 小时前
缓存文件从没写出来:一个 .json 被当成目录用了
python
aifannihao9 小时前
AI 学习第 14 课:CNN 训 6 轮卡在 0.5352,数据没打乱
pytorch·python·深度学习·cnn·学习路线
yuyuxun19 小时前
协同过滤的校园二手物品智能推荐系统的设计与实现 毕业设计-附源码40082
javascript·vue.js·spring boot·python·数据分析·django·课程设计
如夏倾城10 小时前
百度文心(容易被忽略的好用AI)使用方式
人工智能·python·百度·语言模型·dubbo