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

流程图如下:
在这里插入图片描述

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

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

相关文章

PMP 考试的含金量怎么样?

PMP考试的含金量怎么样?培训机构又该如何选择? PMP认证只有在部分城市才能参与职称评定、没有挂靠这一说,毕竟认证体系不一样,但如果是从项目管理行业开始说起的话,其他证书都黯然失色,也只有PMP或同类证书…

【STM32 CubeMX】SPI W25Q64功能实现

文章目录 前言一、内部函数的实现1.1 选中和取消选中SPI Flash1.2 写使能函数1.3 获取读状态1.4 等待就绪状态 二、Flash读写函数实现2.1 读Flash ID2.2 擦除某个扇区2.3 写扇区2.4 读数据 三、测试代码总结 前言 SPI Flash 存储器在嵌入式系统中扮演着重要角色,它…

编程笔记 html5cssjs 082 JavaScript 函数

编程笔记 html5&css&js 082 JavaScript 函数 一、函数二、函数的定义(一)、函数声明:(二)、函数表达式(匿名函数赋值):(三)、箭头函数表达式&#xf…

龙年第一天班

世事洞明皆学问,人情练达即文章。 有许多要学的东西多去学习,少一些紧张,多多的学习辩证法去应用到生活和学习中。

微服务调用组件FeignDubbo实战

RPC概述 思考: 微服务之间如何方便优雅的实现服务间的远程调用? RPC 全称是 Remote Procedure Call ,即远程过程调用,其对应的是我们的本地调用。RPC 的目的是:让我们调用远程方法像调用本地方法一样。 //本地调用 R…

【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(3)数据准备初步

今天来学习数据准备。 一个AI项目要包括构建数据集、数据清理和数据融合、数据采集、特征工程、算法改进和其他步骤。 数据采集和数据清洗,也就是数据准备,要占到人工智能项目一半以上的工作量。 训练的数据量越大,模型越准确。 建立数据标…

C语言 extern关键字理解

一、问题 以下是C语言的程序&#xff1a; sumaa.h: extern int sumAA(int a, int b);sumaa.c: #include <stdio.h> #include "sumaa.h" int sumAA(int a, int b) {return ab; }two.h: void sayBye();two.c: #include "two.h" void sayBye() {print…

突破编程_C++_面试(基本数据类型)

面试题1&#xff1a;在32位和64位系统上&#xff0c;int、short、long、long long 和 char 类型通常分别占用多少字节 在 32 位和 64 位系统上&#xff0c;int、short、long、long long 和 char 类型的大小可能会有所不同&#xff0c;这取决于编译器和操作系统。但按照常见的约…

线程学习小结

线程&#xff1a;一个程序内部的一条执行流程 多线程&#xff1a;软硬件实行的多条执行流程的技术&#xff08;多线程由cpu负责调度执行&#xff09; 多线程的本质就是多个程序同时执行&#xff0c;但是进程同一时间只能有一个&#xff0c;所以线程会被cpu调度并且分配时间片…

使用redis-insight连接到服务器上的redis数据库

一、安装redis&#xff1a; 安装 Redis。你可以通过运行下面的命令来使用 yum 安装 Redis&#xff1a; sudo yum install redis 启动 Redis 服务。安装完成后&#xff0c;你可以通过运行下面的命令来启动 Redis 服务&#xff1a; sudo systemctl start redis 设置 Redis 服务…

g++编译--运行opencv步骤。

一&#xff1a;下载opencv源码库。 1 cmake -D CMAKE_BUILD_TYPERelease -D OPENCV_GENERATE_PKGCONFIGON -D WITH_FFMPEGON … 2 make -j 8 3 make install 二&#xff1a; 找到两个目录&#xff1a; include/ 所有头文件 lib/ 所哟库文件 三&#xff1a;编译运行代码&#xf…

定时器(基本定时器、通用定时器、高级定时器)

目录 一、基本定时器 二、通用定时器 三、高级定时器 一、基本定时器 1、作用&#xff1a;计时和计数。 二、通用定时器 1、除了有基本定时器的计时和计数功能外&#xff0c;主要有输入捕获和输出比较的功能&#xff0c;硬件主要由六大部分组成&#xff1a; ① 时钟源 ② 控…

前端架构: 脚手架框架之yargs的11种基础核心特性的应用教程

脚手架框架之yargs的基础核心特性与应用 1 &#xff09;概述 yargs 是脚手架当中使用量非常大的一个框架进入它的npm官网: https://www.npmjs.com/package/yargs 目前版本: 17.7.2Weekly Downloads: 71,574,188 (动态数据)最近更新&#xff1a;last month (github)说明这是一个…

【Webpack】处理图片资源

处理图片资源 过去在 Webpack4 时&#xff0c;我们处理图片资源通过 file-loader 和 url-loader 进行处理 现在 Webpack5 已经将两个 Loader 功能内置到 Webpack 里了&#xff0c;我们只需要简单配置即可处理图片资源 1. 配置 const path require("path");modul…

美国突然致敬中本聪

作者&#xff1a;秦晋 有点看不懂美国的神操作。 2月16日&#xff0c;据《Bitcoin Magazine》报道&#xff0c;比特币的竞争对手、美国参议员伊丽莎白-沃伦对比特币的立场突然180度大转弯。由反对立场转为支持立场。让很多行业媒体出乎意料&#xff0c;甚至惊掉下巴。 报道称&a…

Web Components详解-HTML Templates

前言 在前面Web Components系列文章的插槽中&#xff0c;我们使用直接在body中写入html标签的形式来承载shadowDOM中的元素&#xff0c;这么做会使标签在DOM多渲染一次&#xff0c;不仅降低了性能&#xff0c;还使标签直接暴露在页面中&#xff0c;遵循组件的可重用性、隔离性…

Unity3D 九宫格地图加载逻辑详解

前言 Unity3D是一款强大的游戏开发引擎&#xff0c;拥有丰富的功能和工具&#xff0c;可以帮助开发者快速构建出各种类型的游戏。在游戏开发中&#xff0c;地图加载是一个非常重要的环节&#xff0c;九宫格地图加载是一种常用的地图加载方式&#xff0c;可以有效地提高游戏性能…

文件上传漏洞--Upload-labs--Pass01--前端绕过

一、前端绕过原理 通俗解释&#xff0c;我们将写有恶意代码的php后缀文件上传到网页&#xff0c;网页中的javascript代码会先对文件的后缀名进行检测&#xff0c;若检测到上传文件的后缀名为非法&#xff0c;则会进行alert警告。若想上传php后缀的文件&#xff0c;就要想办法对…

人工智能学习专栏文章汇总

人工智能大潮已来&#xff0c;stay hungry, stay foolish! 人工智能技术学习类文章汇总&#xff1a; 人工智能学习与实训笔记&#xff08;一&#xff09;&#xff1a;零基础理解神经网络-CSDN博客 人工智能学习与实训笔记&#xff08;二&#xff09;&#xff1a;神经网络之图…

Html的<figure><figcaption>标签

Html的<figure><figcaption>标签 示例一: <figure><figcaption>figcaption001, fig标题1 </figcaption><figcaption>figcaption002, fig标题2 </figcaption><div style"width:calc(100px*2); height:calc(100px*2); back…