scrapy爬虫框架基本介绍

news/2024/7/19 8:58:05 标签: 爬虫, scrapy

一、介绍

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.niftyadmin.cn/n/997369.html

相关文章

恢复桌面ie图标

恢复桌面ie图标有时候把ie图标被删了,要怎么恢复?桌面没有IE图标,自定义桌面里也没有IE选项,试试以下的方法吧。简单的方法:第一:打开“我的电脑”,然后点击“向上”按钮,发现了什么…

smali语法基础详解

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

如何为Kafka集群选择合适的Partitions数量

如何为Kafka集群选择合适的Partitions数量Hadoop技术博文这是许多kafka使用者经常会问到的一个问题。本文的目的是介绍与本问题相关的一些重要决策因素,并提供一些简单的计算公式。文章目录1 越多的分区可以提供更高的吞吐量2 越多的分区需要打开更多地文件句柄3 更…

《开源安全运维平台--OSSIM最佳实践》节日期间当当自营店 五折 优惠活动开始啦!...

《开源安全运维平台--OSSIM最佳实践》节日期间,当当自营店 五折 优惠活动开始啦!截止日期2017-02-07地址: http://product.dangdang.com/23903741.html

Tampermonkey油猴脚本安装及入门

一、简介 油猴脚本是是一款免费的浏览器扩展和最为流行的用户脚本管理器,它适用于 Chrome, Microsoft Edge, Safari, Opera Next, 和 Firefox,通过它可以让浏览器实现各种各样的扩展功能,和浏览器扩展的作用类似。比如获去链接重定向、微博页…

237. Delete Node in a Linked List

问题描述 解决方案 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:void deleteNode(ListNode* node) {if(nodeNULL) return;node->valnode…

使用Spring ThreadPoolTaskExecutor实现多线程任务

我们为何使用多线程,之前已经有讲过了,为了更快的处理多个任务,分割任务,或者调用多个毫无关联的第三方服务 其实spring就提供了ThreadPoolTaskExecutor这个类来实现线程池,线程池是啥,可以理解为数据源&am…

UVA11039 Building designing【排序】

问题链接:UVA11039 Building designing。基础级练习题,用C语言编写程序。 问题简述:输入n个绝对值各不相等的非0整数,选择尽量多的数,排成一个序列,使得正负交替并且绝对值递增。输出其最大长度。 问题分析…