Scrapy爬虫框架(概念)

news2024/10/6 18:21:30

Scrapy 入门教程 | 菜鸟教程 (runoob.com)

Scrapy是一个快速功能强大的网络爬虫框架

Scrapy的安装

通过 pip 安装 Scrapy 框架:

pip install Scrapy

 安装后小测: 执行 scrapy ‐h

Scrapy不是一个函数功能库,而是一个爬虫框架。 

Scrapy架构图(绿线是数据流向)

  • Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

  • Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

  • Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

  • Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器).

  • Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方。

  • Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。

  • Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

Scrapy框架包含三条主要的数据流路径

第一条路径从spider模块经过engine到达scheduler,其中engine到达scheduler的地方获取了爬取用户的请求,我们对这种请求叫做request请求,可以简单的把请求理解为一个url,那么请求通过spider到达engine之后,那么请求通过spider到达engine之后,engine将这个爬取请求转发给了schedule模块

 

 

Scrapy爬虫框架解析

Engine (1) 控制所有模块之间的数据流 (2) 根据条件触发事件 不需要用户修改

Downloader 根据请求下载网页 不需要用户修改

Scheduler 对所有爬取请求进行调度管理 不需要用户修改

Downloader Middleware 目的:实施Engine、Scheduler和Downloader 之间进行用户可配置的控制 功能:修改、丢弃、新增请求或响应 用户可以编写配置代码

Spider (1) 解析Downloader返回的响应(Response) (2) 产生爬取项(scraped item) (3) 产生额外的爬取请求(Request)用户可以编写配置代码

Item Pipelines (1) 以流水线方式处理Spider产生的爬取项 (2) 由一组操作顺序组成,类似流水线,每个操 作是一个Item Pipeline类型 (3) 可能操作包括:清理、检验和查重爬取项中 的HTML数据、将数据存储到数据库 用户可以编写配置代码

Spider Middleware 目的:对请求和爬取项的再处理 功能:修改、丢弃、新增请求或爬取项 用户可以编写配置代码

request库和Scrapy爬虫的比较

相同点: 两者都可以进行页面请求和爬取,Python爬虫的两个重要技术路线 两者可用性都好,文档丰富,入门简单 两者都没有处理js、提交表单、应对验证码等功能(可扩展)

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

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

相关文章

【ROS2指南-4】理解ROS2话题

目标:使用 rqt_graph 和命令行工具来反思 ROS 2 主题。 教程级别:初学者 时间: 20分钟 内容 背景 先决条件 任务 1 设置 2 rqt_graph 3 ros2主题列表 4 ros2主题回显 5 ros2 主题信息 6 ros2界面展示 7 ros2主题发布 8 ros2 主题赫…

光纤能取代网线吗?

光纤与铜缆之间的较量已持续了十多年。现如今随着云计算、5G 等新型业务的不断涌现,数据中心规模不断的扩大,其架构与布线也越来越复杂,而光纤的轻量化及逐渐降低的成本,使得主干网设备对光纤的需求也越来越旺盛,在大型…

pikachu靶场-xss

XSS漏洞攻击原理跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。一般XSS可以分为如下几种常见类型:1.反射性XSS;2.存储型XSS;3.…

成为钢铁侠!只需一块RTX3090,微软开源贾维斯(J.A.R.V.I.S.)人工智能AI助理系统

梦想照进现实,微软果然不愧是微软,开源了贾维斯(J.A.R.V.I.S.)人工智能助理系统,贾维斯(jarvis)全称为Just A Rather Very Intelligent System(只是一个相当聪明的人工智能系统),它可以帮助钢铁侠托尼斯塔克…

何为智能驾驶的「摩尔定律」?这家芯片方案商给出自己的答案

“我觉得(高速NOA)价格下降的速度可能会是非常快的,”4月6日,地平线技术开放日上,地平线副总裁、软件平台产品线总裁余轶南在与高工智能汽车沟通中称,“到2024年底,约100TOPS的高速NOA&#xff…

Lottie加载的一些坑

Lottie是一个非常强大的动画库,可以渲染一些非常绚丽的动画。然而在使用的过程中,会遇到一些诡异的问题。通常,这不是使用方式上有什么问题,大都是UE产出的lottie本身存在问题。本来之前的UE小哥还不错的,跳槽后来了个…

【详解 进程通信】之 System V 共享内存

简介大致操作步骤介绍结果展示key值的获取创建 | 获取共享内存使用共享内存段解除共享内存段销毁共享内存段(重点)命令行方式销毁共享内存段系统调用销毁共享内存使用共享内存进行进程间通信简介 共享内存可以让多个进程共享同一块内存,也就…

如何实现Chatgpt写文章(附chatgpt3.5免费接口)

申明:本次只是说一下实现思路,官方的接口以及如何实现方式,本文没有提及,这次只是一个思路,若想代替人工完成质量还差的很远,请审核大大放行 今天再次优化了代码,修复了一些bug,考虑…

单片机程序是如何运行起来

多年前在学习计算机原理的时候曾经问过老师一个问题,就是我们编写的程序是怎么在计算机中运行起来的,希望有个完整的思路,现在通过网络收集和整理了这个问题,相当于对这个问题又做了一个认识,有了新的体会。以stm32单片…

Go 语言切片是如何扩容的?

原文链接: Go 语言切片是如何扩容的? 在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice)。 切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装。它非常灵活&am…

VCS4 debug with DVE

1、重点讲解: 在verilog源代码中嵌入VCD 系统函数,重点如testbench文件中。VCD文件是VCS产生的仿真波形文件,未经压缩,占用空间较大。VCD是压缩后的波形文件。 编译、仿真以生成VCD文件。 在后处理模式中使用激活DVElog对产生的…

【Javaee】SpringMVC_day01

文章目录1,SpringMVC简介1.1 SpringMVC概述2,SpringMVC入门案例2.1 需求分析2.2 案例制作步骤1:创建Maven项目,并导入对应的jar包步骤2:创建控制器类步骤3:创建配置类步骤4:创建Tomcat的Servlet容器配置类步骤5:配置Tomcat环境步骤6:启动运行…

JS字符串对象

、 JS字符串对象 1.1 内置对象简介 在 JavaScript 中,对象是非常重要的知识点。对象可以分为两种:一种是“自定义对象”外一种是“内置对象”。自定义对象,指的是需要我们自己定义的对象,和“自定义函数”是一些道理;内置对象,…

力扣刷题笔记26——最小的k个数/快速排序学习/快排与冒泡的时间复杂度

最小的k个数/快速排序学习/快排与冒泡的时间复杂度问题我的代码示例代码快速排序代码问题 来自力扣: 输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。示例 …

1672_MIT 6.828 xv6中如何通过构建环境让系统中增加一个可执行调用文件

全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 前面已经分析了如何实现一个系统调用,这个过程的梳理也已经整理成了一份学习笔记。这一次看一下,如何让OS的系统中增加这样的一个可执行的文…

10.网络爬虫—MongoDB详讲与实战

网络爬虫—MongoDB详讲与实战MongoDBMongoDB安装创建数据目录1.数据库操作2.集合操作3.文档操作4.索引操作5.聚合操作6.备份与恢复MongoDB增删改查mongodb集合的增删改查数据插入到表数据的查看删除数据更新数据PyMongo连接数据库第二步 选择需要使用的数据库和集合PyMongo增删…

公司分布式锁加锁错误原因

目录一、问题二、问题复现三、为什么产生这个错误四、解决方案一、问题 第一次设置锁成功, 但是返回false, 后续在循环获取的时候, 因为已经设置成功, 调用setIfAbsent不会返回true, 导致等锁3s失败 private boolean lockWait(String key, long wait, long expire) { long tot…

【CV】Latent diffusion model 扩散模型体验

note 文章目录note一、diffusion模型1.1 Stable Diffusion简介1.2 和GAN对比的优势二、Latent diffusion model原理2.1 潜在空间(Lantent Space)2.2 自动编码器和U-Net2.3 文本编码器三、代码实践3.1 模型权重checkpoints3.2 Stable Diffusion v1模型推理3.3 安装Stable Diffus…

再见了,我的C!

本人的第一篇博客发布于1月份,现在已经4月份了,历时3个月,,已经将C语言涵盖的大多数C语言知识点系统性的整理了出来,在这个期间自己收获了很多,这是C语言的最后一篇文章,接下来我们来回顾一下我…

13.Java面向对象----嵌套类

Java面向对象—嵌套类、内部类、匿名类 一、static静态 在《Java编程思想》有这样一段话:   “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来…