当前位置: 首页 > news >正文

Python-Scrapy框架(框架学习)

一、概述

        Scrapy是一个用于爬取网站数据的Python框架,可以用来抓取web站点并从页面中提取结构化的数据。

基本组件:

  1. 引擎(Engine):负责控制整个爬虫的流程,包括调度请求、处理请求和响应等。

  2. 调度器(Scheduler):负责接收引擎发送的请求,并将其按照一定的策略进行调度,生成待下载的请求。

  3. 下载器(Downloader):负责下载请求对应的网页,可以使用多种下载器,例如基于Twisted的异步下载器和基于requests的同步下载器。

  4. 中间件(Middleware):负责对请求和响应进行预处理和后处理,可以用于添加请求头、处理cookies等操作。

  5. 爬虫(Spider):负责定义如何解析网页和提取数据的规则,包括起始URL、请求构造、响应解析和数据提取等。

  6. 项目管道(Item Pipeline):负责处理爬虫从网页中提取的数据,并进行后续的处理,例如数据清洗、数据存储等。

数据处理流程:

  1. 引擎从爬虫中获取起始URL,并生成对应的请求。

  2. 引擎将请求发送到调度器,调度器将获取到的URL存储在队列中,按照一定的策略进行调度,并生成待下载的请求。

  3. 引擎从调度器中获取接下来需要爬取的页面。

  4. 引擎将待下载的请求通过下载中间件发送到下载器。

  5. 下载器下载网页,并将响应返回给引擎。

  6. 引擎将响应通过爬虫中间件发送给爬虫,爬虫根据定义的规则对响应进行解析,并提取出需要的数据。

  7. 爬虫将提取的数据发送给项目管道,项目管道对数据进行处理,并进行后续的存储或其他操作。

  8. 引擎根据配置的规则继续生成新的请求,并重复上述步骤,直到没有新的请求或达到指定的停止条件。

 下面是Scrapy框架的运行流程

图片来源:www.cxiansheng.cn

二、基本使用方法

2.1 创建&管理Scrapy项目

2.1.1 Scrapy命令行

Scrapy自带一套命令行工具用于管理和运行Scrapy项目。

  1. 创建一个新的Scrapy项目:

    scrapy startproject <project_name>
    
  2. 在项目中创建一个新的Spider:

    scrapy genspider <spider_name> <website_url>
    
  3. 运行Spider并将结果保存为JSON或其他格式:

    scrapy crawl <spider> -o <output_file>.json
    
  4. 列出可用的Spider:

    scrapy list
    
  5. 检查Spider是否正确工作:

    scrapy check <spider_name>
    
  6. 运行Scrapy Shell来交互式地测试和调试Spider:

    scrapy shell <website_url>
    
  7. 查看Scrapy信息:

    scrapy version
    

2.1.2 Pycharm

创建Scrapy项目:

1. 在Pycharm中创建一个“纯python”项目

注:demo1是项目名

2.在pycharm内使用命令行工具创建Scrapy项目

创建spider程序的命令行

scrapy genspider douban movie.douban.com
# douban为爬虫名称
# movie.douban.com为爬虫的作用域

 创建的目录

这些文件分别是:

  • scrapy.cfg: 项目的配置文件。
  • spider2107/: 项目的Python模块,将会从这里引用代码。
  • spider2107/items.py: 项目的目标文件。
  • spider2107/pipelines.py: 项目的管道文件。
  • spider2107/settings.py: 项目的设置文件。
  • spider2107/spiders: 存储爬虫代码目录。

新建虚拟环境:

文件 ——>设置项目设置 ——>新项目的设置

选择python解释器 ——>添加解释器 ——>Virtualenv环境 ——>在项目文件夹下添加envs (虚拟环境)——>确定

激活虚拟环境(Virtualenv环境)

env\Script\activate

注:如果显示无法加载模块,可以先等一段时间,当pycharm新建索引到env文件夹时在运行这段命令 

在pycharm中打开终端

使用pip下载scrapy

pip install scrapy

 创建spider程序

scrapy genspider <spidername><domain>

写好程序后会scrapy会出现一个crawl的执行选项可用于执行spider

scrapy crawl <spidername>

相关文章:

Python-Scrapy框架(框架学习)

一、概述 Scrapy是一个用于爬取网站数据的Python框架&#xff0c;可以用来抓取web站点并从页面中提取结构化的数据。 基本组件&#xff1a; 引擎(Engine)&#xff1a;负责控制整个爬虫的流程&#xff0c;包括调度请求、处理请求和响应等。 调度器(Scheduler)&#xff1a;负责…...

flink生成水位线记录方式--基于特殊记录的水位线生成器

背景 在flink基于事件的时间处理中&#xff0c;水位线记录的生成是一个很重要的环节&#xff0c;本文就来记录下几种水位线记录的生成方式的其中一种&#xff1a;基于特殊记录的水位线生成器 基于特殊记录的水位线生成器 我们发送的事件中&#xff0c;如果带有某条特殊记录的…...

Arcgis日常天坑问题(1)——将Revit模型转为slpk数据卡住不前

这段时间碰到这么一个问题&#xff0c;revit模型在arcgis pro里导出slpk的时候&#xff0c;卡在98%一直不动&#xff0c;大约有两个小时。 首先想到的是revit模型过大&#xff0c;接近300M。然后各种减小模型测试&#xff0c;还是一样的问题&#xff0c;大概花了两天的时间&am…...

JavaWeb:上传文件

1.建普通maven项目&#xff0c;或者maven项目&#xff0c;这里以普通maven为例&#xff0c;区别的jar包的导入方式啦 到中央仓库下载哦 2.结构 3.写fileservlet public class FileServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpSe…...

STM32 大小端与字节对齐使用记录

大小端 串口数据包解析 MDK stm32 小段模式 接收到的数据包&#xff1a; DD 03 00 1B 11 59 00 00 00 00 17 70 00 00 2F 39 00 00 00 00 00 03 23 64 00 0E 02 0B 6E 0B 84 FC EA 77 其中数据内容为&#xff1a; DD 03 00 1B 11 59 //电压mV 00 00 00 00 17 70 …...

RabbitMQ中basic**方法汇总与参数解释

当使用RabbitMQ进行消息传递时&#xff0c;Channel对象提供了一组称为"basic方法"的方法&#xff0c;用于执行最基本的消息传递操作。在本篇博客中&#xff0c;我们将详细介绍这些方法&#xff0c;包括示例和参数解释。 1. basicPublish 方法 basicPublish 方法用于…...

linux之/etc/default/useradd文件

/etc/default/useradd文件是在使用useradd添加用户时&#xff0c;一个需要调用的默认的配置文件之一&#xff0c;可以使用命令"useradd -D"进行修改。 useradd用法&#xff1a; [rootcentos79-3 mail]# useradd --help Usage: useradd [options] LOGINuseradd -Dus…...

3.primitive主数据类型和引用 认识变量

3.1 声明变量 Java注重类型。它不会让你做出把长颈鹿类型变量装进兔子类型变量中这种诡异又危险的举动——如果有人对长颈鹿调用“跳跃”这个方法会发生什么样的悲剧&#xff1f;并且它也不会让你将浮点数类型变量放进整数类型的变量中&#xff0c;除非你先跟编译器确认过数字…...

【群智能算法改进】一种改进的光学显微镜算法 IOMA算法[1]【Matlab代码#60】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 光学显微镜算法&#xff08;OMA&#xff09;1.1 物镜放大倍数1.2 目镜放大倍数 2. 改进后的IOMA算法2.1 透镜成像折射方向学习 3. 部分代码展示4. 仿真结果展示5. 资源获取说明 【获取资源请见文章第5节&#xff1a;…...

第三课-软件升级-Stable Diffusion教程

前言: 虽然第二课已经安装好了 SD,但你可能在其它地方课程中,会发现很多人用的和你的界面差距很大。这篇文章会讲一些容易忽略或者常常需要做的操作,不一定要完全照做,以后再回过头看看也可以。 1.控制类型 问题:为什么别人有“控制类型”部分,而我没有?如下红色方框…...

【C++】设计模式之——建造者

建造者模式概念模拟实现建造者模式代码实现 建造者模式 首先先大体了解一下&#xff0c;建造者模式是什么意思&#xff0c;它是怎么实现的&#xff1f; 首先&#xff0c;建造者模式是一种创建型设计模式再一个它是使用多个简单的对象一步一步的搭建出一个复杂的对象它可以将一个…...

【C++】基础语句(学习笔记)

一、分支 1、三种基本结构 顺序结构分支结构循环结构 2、if与switch对比 1&#xff09;使用场景 switch只支持常量值固定相等的分支判断if可以判断区间范围用switch能做的&#xff0c;用if都能做 2&#xff09;性能比较 分支少时&#xff0c;差别不是很大。分支多时&…...

大厂秋招真题【DP】米哈游20230924秋招T2-米小游与魔法少女-奇运

米哈游20230924秋招T2-米小游与魔法少女-奇运 题目描述与示例 题目描述 米小游都快保底了还没抽到希儿&#xff0c;好生气哦&#xff01;只能打会活动再拿点水晶。 米小游和世界第一可爱的魔法少女 TeRiRi 正在打 BOSS&#xff0c;BOSS 的血量为h&#xff0c;当 BOSS 血量小…...

LVS+Keepalived 高可用集群负载均衡

一.keepalived介绍 1.1.Keepalived实现原理 由多台路由器组成一个热备组&#xff0c;通过共用的虚拟IP地址对外提供服务。 每个热备组内同时只有一台主路由器提供服务&#xff0c;其他路由器处于冗余状态。 若当前在线的路由器失效&#xff0c;则其他路由器会根据设置…...

Qt QList类和QLinkedList类 详解

一、QList 类 对于不同的数据类型&#xff0c;QList<T>采取不同的存储策略&#xff0c;存储策略如下&#xff1a; 如果T 是一个指针类型或指针大小的基本类型(该基本类型占有的字节数和指针类型占有的字节数相同)&#xff0c;QList<T>将数值直接存储在它的数组当…...

Mac安装GYM遇到的一些坑

以下是遇到的一些问题 安装GitHub上说的直接 pip install gym成功了&#xff0c;但是运行实例报错没安装gym[classic_control]&#xff0c;所以就全安装一下[all] 安装GitHub上说的直接 pip install gym成功了&#xff0c;但是运行实例报错没安装gym[classic_control]&#xff…...

【高级rabbitmq】

文章目录 1. 消息丢失问题1.1 发送者消息丢失1.2 MQ消息丢失1.3 消费者消息丢失1.3.1 消费失败重试机制 总结 2. 死信交换机2.1 TTL 3. 惰性队列3.1 总结&#xff1a; 4. MQ集群 消息队列在使用过程中&#xff0c;面临着很多实际问题需要思考&#xff1a; 1. 消息丢失问题 1.1…...

数百个下载能够传播 Rootkit 的恶意 NPM 软件包

供应链安全公司 ReversingLabs 警告称&#xff0c;最近观察到的一次恶意活动依靠拼写错误来诱骗用户下载恶意 NPM 软件包&#xff0c;该软件包会通过 rootkit 感染他们的系统。 该恶意软件包名为“node-hide-console-windows”&#xff0c;旨在模仿 NPM 存储库上合法的“node-…...

SpringBoot的error用全局异常去处理

记录一下使用SpringBoot2.0.5的error用全局异常去处理 在使用springboot时&#xff0c;当访问的http地址或者说是请求地址输错后&#xff0c;会返回一个页面&#xff0c;如下&#xff1a; 这是因为请求的地址不存在&#xff0c;默认会显示error页面 但我们实际需要一个接口&a…...

MyBatisPlus(十一)包含查询:in

说明 包含查询&#xff0c;对应SQL语句中的 in 语句&#xff0c;查询参数包含在入参列表之内的数据。 in Testvoid inNonEmptyList() {// 非空列表&#xff0c;作为参数List<Integer> ages Stream.of(18, 20, 22).collect(Collectors.toList());in(ages);}Testvoid in…...

OpenClaw自动化测试:Qwen3-32B批量执行LeetCode题目

OpenClaw自动化测试&#xff1a;Qwen3-32B批量执行LeetCode题目 1. 为什么需要自动化编程能力测试 作为一名长期关注AI编程辅助工具的技术博主&#xff0c;我一直在寻找能够客观评估大模型编程能力的方法。传统的单次对话测试往往带有偶然性&#xff0c;无法系统性地反映模型…...

USB设备安全弹出工具终极指南:告别Windows繁琐移除,一键搞定所有存储设备

USB设备安全弹出工具终极指南&#xff1a;告别Windows繁琐移除&#xff0c;一键搞定所有存储设备 【免费下载链接】USB-Disk-Ejector A program that allows you to quickly remove drives in Windows. It can eject USB disks, Firewire disks and memory cards. It is a quic…...

知识引导上下文优化(KgCoOp):一种解决灾难性遗忘的 Prompt Tuning 机制

来源&#xff1a;DeepHub IMBA 本文约3000字&#xff0c;建议阅读5分钟本文提出了一种简单有效的约束机制。视觉-语言模型&#xff08;VLMs&#xff09;如 CLIP 彻底改变了零样本图像识别的处理方式。这类模型在包含 4 亿个图像-文本对的大规模数据集上进行训练&#xff0c;捕获…...

对抗攻击新思路:为什么Diffusion模型比GAN更适合生成隐蔽攻击样本?

扩散模型在对抗攻击领域的突破性优势&#xff1a;从理论到实践 当我们在讨论机器学习安全时&#xff0c;对抗攻击一直是个令人着迷又充满挑战的话题。想象一下&#xff0c;只需对输入图像做几乎不可察觉的微小改动&#xff0c;就能让最先进的分类模型完全"失明"——这…...

西门子S7-1200 PLC如何通过EtherCat转Profinet网关实现高效IO控制?5步搞定配置

西门子S7-1200 PLC与EtherCat设备的高效集成&#xff1a;5步实现Profinet网关配置 在工业自动化领域&#xff0c;不同协议设备之间的无缝通信一直是工程师面临的挑战。当您需要将EtherCat设备接入西门子S7-1200 PLC的Profinet网络时&#xff0c;协议转换网关成为关键桥梁。本文…...

5步打造Android Studio中文界面配置:从基础设置到效率倍增的本地化环境方案

5步打造Android Studio中文界面配置&#xff1a;从基础设置到效率倍增的本地化环境方案 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack…...

Java中灵活转换日期时间字符串格式的教程

本教程详细介绍了如何使用Java Java8及更高版本.time API&#xff0c;准确地将各种不同格式的日期时间字符串转换为统一”DD.MM.YYYY“格式。本文强调了现代日期时间API的优势&#xff0c;分析了Datetimeformater模式符号的正确使用&#xff0c;并提供了完整的示例代码和最佳实…...

这次终于选对了!高效论文写作全流程一键生成论文工具推荐(2026 最新)

论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节&#xff0c;以下工具按环节精准匹配&#xff0c;兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求&#xff0c;覆盖免费/付费、通用/垂直场景。2026年&am…...

探索二维非常规态型近场动力学代码

非常规态型近场动力学代码 纬度&#xff1a;二维&#xff1b; 时间积分&#xff1a;自适应动态松弛 or verlet-velocity; 零能抑制模式&#xff1a;silling method or Li pan method; 语言&#xff1a;MATLAB 代码注释详细&#xff0c;可适当在数值模拟领域&#xff0c;近场动力…...

告别“金鱼记忆”:Hologres + Mem0,为大模型打造企业级长记忆引擎

想象一下这个场景&#xff1a;一位用户在周一联系某电商平台的智能客服&#xff0c;咨询了一款高端相机的详细参数和优惠活动&#xff0c;并明确表示“我倾向于购买A品牌”。客服助手热情地解答了问题。到了周三&#xff0c;这位用户再次联系客服&#xff0c;想了解这款相机的配…...