scrapy爬虫框架基本介绍

el/2024/4/19 23:53:12

一、介绍

Scrapy 是一种快速的高级 web crawling 和 web scraping 框架,用于对网站进行爬网并从其页面提取结构化数据。它可以用于广泛的用途,从数据挖掘到监控和自动化测试。

二、架构

在这里插入图片描述
在这里插入图片描述

三、组件

Scrapy Engine

引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。

调度器(Scheduler)

调度器从引擎接受request并将他们入队,以便之后引擎请求他们时提供给引擎。

下载器(Downloader)

下载器负责获取页面数据并提供给引擎,而后提供给spider。

Spiders

Spider是Scrapy用户编写用于分析response并提取item(即获取到的item)或额外跟进的URL的类。 每个spider负责处理一个特定(或一些)网站。 更多内容请看 Spiders 。

Item Pipeline

Item Pipeline负责处理被spider提取出来的item。典型的处理有清理、 验证及持久化(例如存取到数据库中)。 更多内容查看 Item Pipeline 。

下载器中间件(Downloader middlewares)

下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的response(也包括引擎传递给下载器的Request)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。更多内容请看 下载器中间件(Downloader Middleware) 。

一句话总结就是:处理下载请求部分

Spider中间件(Spider middlewares)

Spider中间件是在引擎及Spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items及requests)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。更多内容请看 Spider中间件(Middleware) 。

一句话总结就是:处理解析部分

数据流(Data flow)

Scrapy 中的数据流由引擎控制,其过程如下:

  • Engine 首先打开一个网站,找到处理该网站的 Spider 并向该 Spider 请求第一个要爬取的 URL。
  • Engine 从 Spider 中获取到第一个要爬取的 URL 并通过 Scheduler 以 Request 的形式调度。
  • Engine 向 Scheduler 请求下一个要爬取的 URL。
  • Scheduler 返回下一个要爬取的 URL 给 Engine,Engine 将 URL 通过 Downloader Middlewares 转发给 Downloader 下载。
  • 一旦页面下载完毕, Downloader 生成一个该页面的 Response,并将其通过 Downloader Middlewares 发送给 Engine。
  • Engine 从下载器中接收到 Response 并通过 Spider Middlewares 发送给 Spider 处理。
  • Spider 处理 Response 并返回爬取到的 Item 及新的 Request 给 Engine。
  • Engine 将 Spider 返回的 Item 给 Item Pipeline,将新的 Request 给 Scheduler。
  • 重复第二步到最后一步,直到 Scheduler 中没有更多的 Request,Engine 关闭该网站,爬取结束。

通过多个组件的相互协作、不同组件完成工作的不同、组件对异步处理的支持,Scrapy 最大限度地利用了网络带宽,大大提高了数据爬取和处理的效率。

官方文档

console.log("公众号:虫术")
Blog:http://404nofoundx.top/

http://www.ngui.cc/el/3376897.html

相关文章

smali语法基础详解

一、介绍 apk文件通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件。 smali语言是Davlik的寄存器语言,语法上和汇编语言相似,Dalvik VM与JVM的最大的区别之一就是Dalvik VM是基于寄存器的。基于寄存器的意思是&#…

安卓逆向 | 某社交类APP shield

*本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除 一、分析执行流程 initializeNative()---->cPtr = initialize(str)----->intercept(Interceptor.Chain chain, long j2) 二、Unidbg public class xhs extends AbstractJni {private final Andro…

安卓逆向 | 某社交类APP gsid

*本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除 一、目标参数 gsid 二、抓包 表单里面必要的几个参数checktoken、mfp、appkey,其中appkey是固定值。 0x01、checktoken jadx搜索checktoken,跟进去发现个b方法,用r0tracer hook一下这个方法,根据抓…

安卓逆向 | 某新闻类APP sign

*本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除 一、抓包 POST请求,url和header里面都携带一个sign,url中的sign猜测可能是根据From表单进行的加密,修改参数,显示签名错误,header里面可能是根据时间戳进行的加密。 二、Header中的sign 1、Java层分…

安卓逆向 | 某新闻类APP sn

*本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除 一、抓包 通过抓包,然后转换成python代码,通过删除字段的方式确定加密参数为 st:猜测为时间戳sn:猜测根据时间戳加密二、脱壳 查壳工具查看有壳,用Frida-DEXDump脱壳,不会的可以点击传送门,开箱即用…

密码学 MD5信息摘要算法

一、简介 MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保…

mitmproxy:ImportError: DLL load failed while importing _brotli: 找不到指定的模块。

问题: ImportError: DLL load failed while importing _brotli: 找不到指定的模块。 ImportError: DLL load failed while importing _brotli: 找不到指定的模块。 ImportError: DLL load failed while importing _brotli: 找不到指定的模块。 解决方案: https://support.mi…

(点云补全任务)GAN逆映射:Unsupervised 3D Shape Completion through GAN Inversion

(点云补全任务)GAN逆映射:Unsupervised 3D Shape Completion through GAN Inversion简介论文abstract1. introduction2. related works3. method概述3.1 Enhancing Point Cloud Uniformity3.2 Degradation in the 3D Space3.3 Loss Function …

多视图分类)View-GCN:View-based Graph Convolutional Network for 3D Shape Analysis

(多视图分类)View-GCN:View-based Graph Convolutional Network for 3D Shape Analysis简介论文abstract1. Introduction2. Related Works2.1 Multi-view 3D shape recognition2.2 Graph convolutional networks3. Overview of Our Approach3…

(多视图分类)EMVN:Equivariant Multi-View Network

(多视图分类)EMVN:Equivariant Multi-View Network简介论文abstractintroduction2. Related work2.1 3D shape analysis2.2 Equivariant representations3. Preliminaries4. Method4.1 View configurations4.2 Group convolutional networks4.3 Equivari…