Python爬虫4-Scrapy爬虫框架入门了解

news2025/1/19 14:26:51

目录

    • 1、Scrapy爬虫框架介绍
      • 1.1 requests库和Scarpy爬虫的比较
      • 1.2 Scrapy爬虫的常用命令
    • 2、Scrapy爬虫基本使用
      • 2.1 步骤
      • 2.2 yield关键字的使用

1、Scrapy爬虫框架介绍

安装Scrapy库:pip install scrapy
爬虫框架:是实现爬虫功能的一个软件结构和功能组件集合
爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫
5+2结构:5个主要模块以及两个中间键,以及3个数据流路径
在这里插入图片描述
Engine:

  1. 控制所有模块之间的数据流
  2. 根据条件触发事件
  3. 不需要用户修改,是核心

Downloader:

  1. 根据请求下载网页
  2. 不需要用户修改

Scheduler:

  • 不需要用户修改,对所有爬虫请求进行调度管理

Engine与Downloader之间增加了一个中间键Downloader Middleware:

Spider

  1. 解析Downloader返回的响应
  2. 产生爬取项
  3. 产生额外的爬取请求

item PipeLines

  1. 以流水线方式处理Spider产生的爬取项
  2. 由一组操作顺序组成,类似流水线,每个操作是一个Item Pipeline类型
  3. 可能操作包括:请理、检验和查重爬取项中的HTML数据、将数据存储在数据库中

Spider与 item PipeLines之间增加了另一个中间键 Spider middleware
在这里插入图片描述
总结:用户需要重点编写spider模块和item pipelines模块

1.1 requests库和Scarpy爬虫的比较

在这里插入图片描述
不同点:

在这里插入图片描述
应用选择:
在这里插入图片描述

1.2 Scrapy爬虫的常用命令

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

2、Scrapy爬虫基本使用

2.1 步骤

步骤1:建立一个Scrapy爬虫工程
打开command,进入D盘的pycodes目录,在其中建立爬虫工程
在这里插入图片描述
在执行上面代码后,在D盘的pycodes目录会产生以下的目录
在这里插入图片描述
在这里插入图片描述
步骤2:在工程中产生一个Scrapy爬虫

scrapy genspider --生成爬虫

在这里插入图片描述
在这里插入图片描述
步骤3:配置产生的spider爬虫

在这里插入图片描述

2.2 yield关键字的使用

yield ---- 生成器

  • 生成器是一个不断产生值的函数
  • 包含yield语句的函数是一个生成器
  • 生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值

在这里插入图片描述
yield通常结合for循环一起执行

为什么用生成器呢?

  1. 更节省存储空间
  2. 响应更加迅速
  3. 使用更加灵活

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

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

相关文章

手动挂载apex镜像

手动挂载apex镜像 1.loop设备 在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。 这要先从mount的流程来理解,挂载操作,实际上就是把设备上的文件系统/目…

【MyBatis】核心配置文件,三大对象的作用域,#{}和${}的区别

1. environment环境:一般一个环境environment会对应一个SqlSessionFactory对象sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"),"另一个环境的id");// 数据库环境配置在这个标签里 // 这里的default表示默认使用的环…

Spring Security 源码解读 :基本架构及初始化

Spring Security 是基于web的安全组件,所以一些相关类会分散在 spring-security包和web包中。Spring Security通过自定义Servlet的Filter的方式实现,具体架构可参考官网Spring Security: Architecture 这里使用Spring Boot 2.7.4版本,对应Sp…

安某客滑块分析

本文仅供学习,不参与商业应用 目标连接: aHR0cHM6Ly93d3cuYW5qdWtlLmNvbS9jYXB0Y2hhLXZlcmlmeS8/Y2FsbGJhY2s9c2hpZWxkJmZyb209YW50aXNwYW0 接口分析 刷新链接可以看到getInfoTp的接口,请求参数sessionId及dInfo是加密参数 返回的参数包含…

Cesium 生成terrain地形数据

Cesium 生成terrain地形数据 处理地形数据 由于CTB工具不支持DEM为NoData值和float的数据,所以需要对数据进行处理。 多个tif必须县合并镶嵌成一张tifpixeltype从float转为intNoData值处理为0我使用的是ArcGis10.5,打开ArcMap: 打开 ArcToolbox->Data Management Tools…

C语言基础知识(55)

C语言程序在不使用数组的情况下找到“N”个数字中的最大数字参考以下代码实现&#xff1a;#include<stdio.h>intmain(){int count 0;int numb1 0;int numb2 0;int i 0;printf("Enter count of numbers ");scanf("%d",&count);if(count <0){p…

HTTP绕WAF之浅尝辄止

0X00前言 最近参加重保&#xff0c;和同事闲聊时间&#xff0c;谈起来了外网&#xff0c;彼时信心满满&#xff0c;好歹我也是学了几年&#xff0c;会不少的。结果&#xff0c;扭头看完do9gy师傅的《腾讯 WAF 挑战赛回忆录》&#xff0c;就啪啪打脸了。说来惭愧&#xff0c;最…

【数据结构(5)】2.3 线性表的类型定义

文章目录1. 线性表的抽象数据类型定义2. 线性表的基本操作1. 线性表的抽象数据类型定义 数据对象&#xff1a;就是一些元素&#xff0c;元素的个数大于等于 0。数据关系&#xff1a;ai-1 是 ai 的前驱&#xff0c;同时 ai 是 ai-1 的后继&#xff0c;他们都属于集合 D 2. 线性…

1月的碎碎念,但是很有必要

从今年开始每个月会整理一个我生活的琐碎但觉得有必要的事&#xff0c;一来方便年底回顾&#xff0c;二来也希望这些事情对大家有也有些参考。 不高大上&#xff0c;但是希望某一天再看到的时候会觉得充满趣味。1.新的1年的1月开始了&#xff0c;想了很多计划&#xff0c;搬新办…

rocketmq源码-consumerQueue和indexFile文件写入

前言 在rocketmq的文件中&#xff0c;除了commitLog文件&#xff0c;还有两个重要的文件&#xff0c;分别是indexFile文件和consumerQueue文件&#xff0c;这篇笔记主要记录这两个文件的数据是怎么写进去的 consumeQueue文件中对应topic下的一个queue&#xff0c;在consumeQue…

ubuntu22.04安装kalibr

前言 首先ros1目前目前在ubuntu支持的最高版本是20.04。当时我是在ubuntu22.04上编译安装的ros1。过程也十分坎坷&#xff0c;手动下载了很多包&#xff0c;具体就不累赘了。 再者目前网上的资料也都是kalibrros1, 所以推荐安装ros1之后再来安装kalibr。其次这次安装主要 参考…

关于splitChunks的一次原理探索

前言 前端时间在做项目加载优化时用到了splitChunks自动拆包&#xff0c;后了解了一下原理写下了此文。 Modules和Chunks Modules简单来理解就是我们写的功能模块&#xff0c;不管是CommonJS还是ESM都算是一个Module&#xff0c;而Chunks则是webpack根据我们的规则/默认规则…

spring security 前后端分离 进行用户验证 权限登陆的实现代码(看不懂??直接cv)

目录 前言&#xff1a; 一.所需依赖 二.application.properties 三.工具类 3.1ApplicationContextUtils 3.2JwtUtils 3.3ResponseResult 3.4ResponseStatus 3.5RsaUtils 四.UserDetailServiceImpl 五.成功处理器 六.SecurityConfig 七. filter 前言&#xff1a; 前后…

多个路由器的局域网终端设备的资源访问

多个路由器之间资源的访问 本质是将路由设备放置到一个网段 中继路由 中继的路由可以看作是另一个路由中的一个终端设备&#xff0c;只是为了延长传递wifi&#xff0c;在使用ipcofig中的网关和主路由的网关一样&#xff0c;一般都是主路由的IP。 无线桥接的中继路由 无论是…

车-电-路网时空分布负荷预测研究(Matlab代码)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

使用c语言连接mysql数据库并且批量插入数据

​ 使用从c连接数据库需要在本机安装数据库&#xff0c;或者拿到数据库所在主机的IP地址。先说明我使用的是mysql8.0 64位的数据库&#xff0c;使用的vs是vs2019。 1.配置环境 首先打开vs2019&#xff0c;创建一个空项目&#xff0c;让后右击下图所示位置&#xff0c;然…

网络编程套接字之UDP

文章目录一、网络编程二、UDP数据报套接字编程DatagramSocketDatagramPacket实现客户端服务器程序EchoServer客户端一、网络编程 我们网络编程的核心: Socket API&#xff0c;操作系统为我们应用程序提供的API&#xff0c;我们的Socket是和传输层密切相关的。 我们传输层为我…

SpringBoot+Vue+Wx健康上报系统

简介&#xff1a;本项目采用了基本的springbootvueWx设计健康上报系统。详情请看截图。经测试&#xff0c;本项目正常运行。本项目适用于Java毕业设计、课程设计学习参考等用途。 项目描述 项目名称SpringBootVueWx健康上报系统源码作者LHL项目类型Java EE项目 &#xff08;前…

多线程初阶——线程状态

多线程初阶——线程状态 文章目录多线程初阶——线程状态1.Thread类及常见构造方法2.Thread常见的方法3.线程相关的重要操作3.1启动线程—start()3.2中断线程3.3 等待线程— join()3.4 获取线程引用3.5休眠线程—sleep()4.线程的状态1.Thread类及常见构造方法 方法说明Thread(…

前端js实现根据文件url批量压缩下载成zip包

前言 项目开发中&#xff0c;产品经理提了这样一个需求&#xff1a;将系统中的附件实现批量打包下载功能。本来系统中是有单个下载及批量下载功能&#xff0c;现在应业务方的需求&#xff0c;需要多加个批量打包下载。 初步设想是&#xff1a;由后端编写接口实现。但后来经过思…