爬虫框架之Scrapy介绍——高效方便

news2024/9/20 2:03:42

# 近年来大数据分析、数据可视化和python等课程逐渐在大学各个学科中铺展开来,这样一来爬虫在平时小作业和期中、期末报告中出现的频率也逐渐变高。那么单一的使用requests库,自己从头到尾的的设计,考虑数据提取、线程管理和数据存储等方方面面的问题。那有没有现成的库或者工具可以使用呢?就比如今天要介绍的scrapy,当你尽心尽力,绞尽脑汁,考虑方方面面之后你就会意识到你做了一个比较简易的scrapy。

一、scrapy简介

Scrapy 是一个用于数据爬取的 Python 框架,专门为网络抓取(Web Scraping)任务设计。它提供了高效的方式来提取网站上的数据,并且支持管理复杂的抓取规则和任务。Scrapy 的设计理念是快速、可扩展和强大,常用于爬虫项目和数据收集工作。

(一)Scrapy 的主要特点


1.异步处理

Scrapy 基于 Twisted 框架,支持异步网络请求,使得它可以同时处理大量请求,提高了抓取效率。
2.简单易用的 API

提供了简单的 API,用户只需定义抓取逻辑,Scrapy 就能自动处理请求调度、响应解析、数据保存等。
3.高度可定制

通过编写自定义的中间件、管道、扩展等,用户可以轻松扩展和定制 Scrapy 的功能。
支持多种输出格式:Scrapy 可以将抓取到的数据保存为 JSON、CSV、XML 等格式,方便后续处理。
4.内置强大的抓取和解析工具

Scrapy 自带了选择器(如 XPath 和 CSS 选择器)和强大的请求调度器,能自动处理爬取深度和 URL 去重。

(二)Scrapy 的核心组件

1.Spider(爬虫)

Spider 是 Scrapy 的核心组件,用于定义要抓取的网页、如何提取信息等。每个爬虫对应一个或多个网站,用户需要定义如何处理每个页面。
2.Item(项目)

Item 是一个容器,用于定义抓取到的数据结构。类似于字典或数据库中的记录,保存爬虫提取的信息。
3.Pipeline(管道)

Pipeline 处理爬取到的数据。通过管道,可以对抓取的数据进行清洗、验证,或者将其保存到数据库中。
4.Middleware(中间件)

Middleware 是处理请求和响应的钩子,位于 Scrapy 请求调度器与爬虫之间,可以在不同的阶段对请求或响应进行自定义处理。
5.Scheduler(调度器)

调度器负责管理爬虫的请求队列,确保每个请求都能被正确处理和去重。
6.Downloader(下载器)

下载器负责发送 HTTP 请求并获取响应。它会将响应传递给爬虫进行处理。

二、Scrapy 的工作流程

Spider 发出初始请求——定义爬虫逻辑,爬虫启动时会发出初始的 URL 请求。
下载器抓取网页——下载器会根据 Spider 发出的请求抓取相应网页的内容。
Spider 解析网页——抓取的网页内容返回给 Spider,Spider 解析其中的信息并生成 Items。
管道处理数据——Items 传递给管道进行进一步处理,如数据清洗、保存等。
调度器处理新请求——Spider 还可以生成新的请求,调度器会管理这些请求,继续抓取其他页面。

三、Scrapy 命令详解

Scrapy 命令行界面提供了一系列命令,帮助开发者方便地管理、运行和调试爬虫项目。在对应项目终端输入scrapy就能列出所有命令及对应的命令与参数。下面对每个命令进行简要解释。

1. bench
解释: 运行一个快速基准测试,用于测试 Scrapy 的性能。
用途: 了解 Scrapy 处理请求的速度,通常用于调试或优化性能。
2. check
解释: 检查爬虫契约。
用途: 爬虫契约是一种 Scrapy 中的测试工具,定义了爬虫如何处理特定的网页。此命令用于验证爬虫的行为是否符合预期。
3. crawl
解释: 运行指定的爬虫。
用途: 用来启动一个项目中的爬虫进行数据抓取任务。
4. edit
解释: 编辑爬虫代码。
用途: 快速打开爬虫文件进行编辑,简化了开发流程中的修改步骤。
5. fetch
解释: 使用 Scrapy 下载器抓取指定的 URL。
用途: 测试一个 URL,查看其响应结果,帮助调试爬虫抓取特定网页时的行为。
6. genspider
解释: 使用预定义模板生成新的爬虫。
用途: 根据给定的 URL 或域名快速生成爬虫代码骨架,节省初始代码编写时间。
7. list
解释: 列出当前项目中可用的爬虫。
用途: 查看项目中已经定义的所有爬虫,便于管理和选择运行。
8. parse
解释: 使用对应的爬虫解析 URL 并打印解析结果。
用途: 调试特定 URL 的解析过程,检查爬虫如何提取页面中的数据,验证解析规则是否正确。
9. runspider
解释: 运行一个自包含的爬虫,不需要创建完整的 Scrapy 项目。
用途: 适合用于快速测试或执行简单抓取任务,而无需搭建完整的项目结构。
10. settings
解释: 获取 Scrapy 的配置设置值。
用途: 查看 Scrapy 中的某些配置项的值,便于调试和修改配置。
11. shell
解释: 启动一个交互式抓取控制台。
用途: 允许开发者在命令行中手动发出请求、解析页面,进行实时调试,非常适合排查问题。
12. startproject
解释: 创建一个新的 Scrapy 项目。
用途: 初始化一个新的爬虫项目,生成标准的项目文件结构。
13. version
解释: 打印 Scrapy 的当前版本号。
用途: 查看所安装的 Scrapy 版本,便于检查兼容性或调试问题。
14. view
解释: 以 Scrapy 看到的方式在浏览器中打开 URL。
用途: 方便查看 Scrapy 抓取的网页在浏览器中的展示效果,帮助理解网页结构和调试抓取结果。

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

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

相关文章

微服务架构详解

微服务与SOA概述 SOA历史 SOA示例 微服务历史 SOA 被抛弃了么? 微服务与 SOA 剖析 SOA 架构剖析 ESB就是一个一个微服务的功能 ESB 功能举例 对象转换还有逻辑转换 很多东西都要在ESB里面处理 微服务剖析 把一个单体结构拆分多个小服务。为了让小服务之间通信方便&#x…

用AI的智慧,传递感恩之心——GPT-4o助力教师节祝福

随着科技的飞速发展,人工智能在我们生活中的应用日益广泛。在这个教师节,不仅可以用传统的方式表达对老师的感恩之情,还可以借助OpenAI最新推出的GPT-4o模型,生成独特而温暖的祝福语和精美海报,让我们的感恩显得更加与…

Renesas R7FA8D1BH (Cortex®-M85)的UART使用介绍

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 FSP配置UART 2.1 配置参数 2.2 UART模块介绍 3 接口函数介绍 3.1 R_SCI_B_UART_Open() 3.2 R_SCI_B_UART_Close() 3.3 R_SCI_B_UART_Read() 3.4 R_SCI_B_UART_Write() 3.5 R_SCI_B_UAR…

【iOS】——JSONModel源码

JSONModel用法 基本用法 将传入的字典转换成模型: 首先定义模型类: interface Person : JSONModel property (nonatomic, copy) NSString *name; property (nonatomic, copy) NSString *sex; property (nonatomic, assign) NSInteger age; end接…

Java 23 的12 个新特性!!

Java 23 来啦!和 Java 22 一样,这也是一个非 LTS(长期支持)版本,Oracle 仅提供六个月的支持。下一个长期支持版是 Java 25,预计明年 9 月份发布。 Java 23 一共有 12 个新特性! 有同学表示&…

Qwen 2.5:阿里巴巴集团的新一代大型语言模型

Qwen 2.5:阿里巴巴集团的新一代大型语言模型 摘要: 在人工智能领域,大型语言模型(LLMs)的发展日新月异,它们在自然语言处理(NLP)和多模态任务中扮演着越来越重要的角色。阿里巴巴集…

「数据科学」清洗数据,使用Python语言处理数据集中的重复值

数据集中的重复值,产生的原因有很多,如果不进行处理的话,会对我们的后续分析过程,产生很大的影响。比如说,在统计汇总数据的时候,重复数据就会导致数据总数增多。要是重复数据多的话,会影响我们…

2024 go-zero社交项目实战

背景 一位商业大亨,他非常看好国内的社交产品赛道,想要造一款属于的社交产品,于是他找到了负责软件研发的小明。 小明跟张三一拍即合,小明决定跟张三大干一番。 社交产品MVP版本需求 MVP指:Minimum Viable Product&…

Java自定义集合-基于文件的泛型列表 LocalFileArrayList

Java实现基于文件的泛型列表 LocalFileArrayList 简介核心概念泛型文件操作实现细节构造函数读取和写入文件类型转换List 接口方法实现总结调用示例完整代码简介 LocalFileArrayList我自己随便起的,没怎么思考,不一定是最适合的名字。搞这东西主要是有些需求用到的数据量太大…

95分App引领年轻人省钱赚钱新风尚,闲置也能变宝藏

随着时代的发展,年轻一代的消费观念正经历着深刻的变革。他们不再盲目追求新品、奢侈品,而是喜欢上购买闲置物品来满足日常所需。在消费的同时,加入了卖家的行列。对自己拥有的闲置物品开启“断舍离”,纷纷在闲置平台进行售卖。这…

鸿蒙媒体开发系列05——音频并发播放管理与音量管理

如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下方名片,关注公众号,公众号更新更快,同时也有更多学习资料和技术讨论群。 1、多音频播放的并发管理 多音频并发,即多个音频流同时播放。此场景下&…

GAMES104:15 游戏引擎的玩法系统基础-学习笔记

文章目录 0,游戏性课程框架一,事件机制1.1 事件的定义1.2 callback的注册1.3 事件的分发系统 二,游戏逻辑与脚本系统2.1 特点和常见脚本语言2.2 脚本语言的GO管理2.3 脚本语言的架构2.4 可视化脚本 三,Gameplay 开发中的3C &#…

关雅荻发文批评某脱口秀节目审核问题:为博流量乱搞事情?

最近,针对某脱口秀节目中引发的网络舆情,电影制片人关雅荻发文严厉批评该视频平台的审核问题,指出“这家视频网站对应的节目审核环节严重失职,或者有意渎职,这个脱口秀节目制作方在自己内容策划和制作也有明显失职、严…

一招有效清理宠物浮毛,养宠搭子——质量好的宠物空气净化器推荐

害,好不容易毕业找到了工作进入社会,我以为可以自己决定事情了,结果上周又被我妈臭骂一通。因为我瞒着他们养猫了,他们来看我的时候才知道,说我刚出来养活自己都够呛,哪里还能照顾猫。在我好说歹说下&#…

数字电路与逻辑设计-触发器功能测试及其应用

一、实验目的 1.验证基本RS、JK、D、T和T’触发器的逻辑功能及使用方法; 2.能进行触发器之间的相互转换; 3.学习触发器的一些应用。 二、实验原理 触发器具有两个能够自行保持的稳定状态,用以表示逻辑状…

使用llama.cpp 在推理MiniCPM-1.2B模型

llama.cpp 是一个开源项目,它允许用户在C中实现与LLaMA(Large Language Model Meta AI)模型的交互。LLaMA模型是由Meta Platforms开发的一种大型语言模型,虽然llama.cpp本身并不包含LLaMA模型的训练代码或模型权重,但它…

vmware中的ubuntu系统扩容分区

1.虚拟机关机 右击虚拟机/设置,进入虚拟机设置 3.启动虚拟机,进入命令行 4.fdisk -l查看要扩展的分区名 5.resize要扩容的分区 su root parted /dev/sda resizepart 3 100% fdisk -l resize2fs /dev/sda3 df -T完成 6.其他 进入磁盘管理 fdisk /d…

MYSQL解说

MySQL是一个流行的开源关系型数据库管理系统(RDBMS),广泛用于网站和应用程序的后端数据存储。 MySQL的基础知识: 1. 数据库和表 数据库(Database):存储数据的逻辑容器。表(Table&…

JAVA——打印流

目录 一、printStream 二、printWriter 三、打印流的应用——输出重定向 输出语句重定向的意义 一、printStream 1. 作用: 打印流可以实现更方便、更高效的打印数据出去 跟着黑马实现一下:printStream 的底层实现效率更高,println输什么…

关于实时数仓的几点技术分享

一、实时数仓建设背景 业务需求的变化:随着互联网和移动互联网的快速发展,企业的业务需求变得越来越复杂和多样化,对数据处理的速度和质量要求也越来越高。传统的T1数据处理模式已经无法满足企业的需求,实时数据处理成为了一种必…