首页 > 其他分享 >Spider理论系列--Scrapy框架介绍

Spider理论系列--Scrapy框架介绍

时间:2023-05-26 21:31:49浏览次数:46  
标签:框架 -- 中间件 scrapy Spider --- Scrapy 引擎 爬虫

Scrapy框架

一、前言

无论什么技术,都是有框架的,而框架我的理解就是程序员为了简化开发而封装好的一个集合。而本次的Scrapy框架就是封装好的爬虫框架。

1、介绍

前面我们学习了基础的爬虫实现方法和selenium以及mongodb数据库,那么接下来会我们学习一个上场率非常高的爬虫框架:scrapy

2、内容

  • scrapy的基础概念和工作流程
  • scrapy入门使用

二、scrapy的概念和流程

1、为什么学习scrapy?

  1. 能够让开发过程方便、快速
  2. scrapy框架能够让我们的爬虫效率更高

2、什么是scrapy?

文档地址:https://docs.scrapy.org/en/latest/

Scrapy 使用了Twisted['twɪstɪd]异步网络框架,可以加快我们的下载速度。

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量代码,就能够快速抓取

3、异步和非阻塞的区别

前面我们说Twisted是一个异步的网络框架,经常我们也听到一个词语叫做非阻塞,那么他们有什么区别呢?

Spider理论系列--Scrapy框架介绍_python

异步:调用在发出之后,这个调用就直接返回,不管有无结果;异步是过程。 非阻塞:关注的是程序在等待调用结果(消息,返回值)时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程。

4、scrapy的工作流程

4.1 回顾之前的爬虫流程

Spider理论系列--Scrapy框架介绍_python_02

这也就是我之前一直在用的逻辑。

4.2 上面的流程可以改写为

Spider理论系列--Scrapy框架介绍_python_03

4.3 scrapy的流程

Spider理论系列--Scrapy框架介绍_python_04

其流程可以描述如下:
  1. 调度器把requests-->引擎-->下载中间件--->下载器
  2. 下载器发送请求,获取响应---->下载中间件---->引擎--->爬虫中间件--->爬虫
  3. 爬虫提取url地址,组装成request对象---->爬虫中间件--->引擎--->调度器
  4. 爬虫提取数据--->引擎--->管道
  5. 管道进行数据的处理和保存
注意:
  • 图中绿色线条的表示数据的传递
  • 注意图中中间件的位置,决定了其作用
  • 注意其中引擎的位置,所有的模块之前相互独立,只和引擎进行交互
4.4 scrapy中每个模块的具体作用

Spider理论系列--Scrapy框架介绍_Scarpy_05

小结

  1. scrapy的概念:Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架
  2. scrapy框架的运行流程以及数据传递过程:
  1. 调度器把requests-->引擎-->下载中间件--->下载器
  2. 下载器发送请求,获取响应---->下载中间件---->引擎--->爬虫中间件--->爬虫
  3. 爬虫提取url地址,组装成request对象---->爬虫中间件--->引擎--->调度器
  4. 爬虫提取数据--->引擎--->管道
  5. 管道进行数据的处理和保存
  1. scrapy框架的作用:通过少量代码实现快速抓取
  2. 掌握scrapy中每个模块的作用:
    引擎(engine):负责数据和信号在不同模块间的传递 调度器(scheduler):实现一个队列,存放引擎发过来的request请求对象
    下载器(downloader):发送引擎发过来的request请求,获取响应,并将响应交给引擎
    爬虫(spider):处理引擎发过来的response,提取数据,提取url,并交给引擎
    管道(pipeline):处理引擎传递过来的数据,比如存储
    下载中间件(downloader middleware):可以自定义的下载扩展,比如设置代理ip
    爬虫中间件(spider middleware):可以自定义request请求和进行response过滤
  3. 理解异步和非阻塞的区别:异步是过程,非阻塞是状态


标签:框架,--,中间件,scrapy,Spider,---,Scrapy,引擎,爬虫
From: https://blog.51cto.com/u_15915681/6359151

相关文章

  • 孪生素数
    一问题描述相差为2的两个素数成为一对孪生素数,求出一千以内的孪生素数。二设计思路设计一个函数调用判断两个相差2的数是否是孪生素数。三程序流程图 四伪代码实现#include<iostream>#include<math.h>usingnamespacestd;intprime(intn){ intj; longk;k=sqrt(n)+1; ......
  • 长亭雷池waf社区版搭建
    dockerversion#检查docker版本执行以下命令创建并进入雷池安装目录mkdir-psafeline#创建safeline目录cdsafeline#进入safeline目录执行以下命令,将会自动下载镜像,并完成环境的初始化curl-fsSLkhttps://waf-ce.chaitin.cn/release/latest/setup.sh|bash执行......
  • c++打卡第三十八天
    一、歌星大奖赛1、问题描述 2、设计思路我们可以定义数组,存储十个评委所打的分数,输入十个数值,对这十个数值进行排序,然后去掉数组的首尾,计算的总和除以8计算得分数的平均数。3、流程图 4、代码实现#include<iostream>usingnamespacestd;intmain(){inta[10];......
  • 8. 字符串转换整数 (atoi)
    请你来实现一个myAtoi(strings)函数,使其能将字符串转换成一个32位有符号整数(类似C/C++中的atoi函数)。函数myAtoi(strings)的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。确定最终结果是负数还是正数。......
  • pwn1_sctf_2016
    先检查一下开了什么保护机制打开32位ida看看这个是啥鸭,像这种c++的代码最难看了,只能一个函数一个函数的百度我在这边简述一下,这些函数一大串就是实现了把s数组中的I整体替换成了you,其他的就没了,然后我们先去找找有没有后门函数之类的找到了一个叫做get_flag的函数,打开一看......
  • drf全局异常处理,接口文档,jwt介绍和原理,base64编码和解码
    drf全局异常处理:只要三大认证,视图类的方法出了异常,都会执行一个函数:rest_framework.viewsimportexception_handlersetting:REST_FRAMEWORK={'EXCEPTION_HANDLER':'app01.exception.commn_exception_handler',#导入自己写的异常类的路径}......
  • ThreadLocal源码学习笔记
    系列文章目录和关于我一丶ThreadLocal结构#每一个Thread对象都有一个名为threadLocals类型为ThreadLocal.ThreadLocalMap的属性,ThreadLocal.ThreadLocalMap对象内部存在一个Entry数组,其中存储的Entry对象key是ThreadLocal,value便是我们绑定在线程上的值。ThreadLocal可以做......
  • 前端树形结构图组件 tree组件,可拖拽移动,点击展开收缩,无限添加子集
    快速实现树形结构图组件tree组件,可拖拽移动,点击展开收缩,无限添加子集;下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12650效果图如下:  实现代码如下:#treeShapeStruct树形结构图,可拖拽移动,点击展开收缩,无限添加子集使用方法####HTM......
  • CMake vs Makefile: 如何选择适合你的项目构建工具
    在软件开发中,构建(build)是一个非常重要的过程。我们需要将源代码转换为可执行文件或库文件。为了完成此过程,我们通常使用构建工具来自动化构建过程。CMake和Makefile都是用于构建和管理软件项目的工具。CMake是一个跨平台的构建工具,它可以自动生成Makefile,而Makefile是一个GNU工具......
  • 检测手机系统是iOS还是android(可实现根据手机系统跳转App下载链接)
    快速实现检测手机系统是iOS还是android(可实现根据手机系统跳转App下载链接);下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12652效果图如下:   实现代码如下:#使用方法####HTML代码部分```html<template><viewclass="content">......