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

ops/2024/9/23 15:40:40/

# 近年来大数据分析、数据可视化和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.ppmy.cn/ops/114838.html

相关文章

SpringBoot实战(三十)发送HTTP/HTTPS请求的五种实现方式【下篇】(Okhttp3、RestTemplate、Hutool)

目录 一、五种实现方式对比结果二、Demo接口地址实现方式三、Okhttp3 库实现3.1 简介3.2 Maven依赖3.3 配置文件3.4 配置类3.5 工具类3.6 示例代码3.7 执行结果实现方式四、Spring 的 RestTemplate 实现4.1 简介4.2 Maven依赖4.3 配置文件4.4 配置类4.5 HttpClient 和 RestTemp…

vue的基本原理

Vue.js 的基本原理可以分为几个核心部分来理解:响应式系统、虚拟 DOM、模板编译、组件化系统、指令系统,以及 Vue 的生命周期。这些原理共同构成了 Vue 的运行机制。 1. 响应式系统 Vue 的响应式系统是其核心原理之一。Vue 通过 数据劫持 技术来实现视…

小程序与APP的区别

目录 前言1. 开发方式与成本2. 运行环境与获取途径3. 功能复杂度与交互体验4. 更新与维护5. 推广与用户获取6. 占用空间与存储7. 可分享性总结 前言 小程序与APP作为两种不同类型的应用程序,它们在多个方面存在明显的区别。以下是对这些区别的详细阐述:…

【ESP32】Arduino开发 | 中断矩阵+按键输入中断例程

对于中断矩阵的详细介绍会放在ESP-IDF开发文章中,跳转栏目目录可以找到对应文章。 1. API 1.1 绑定GPIO中断 attachInterrupt(uint8_t pin, voidFuncPtr handler, int mode); pin:管脚号;handler:中断处理函数;mode…

2023年全国研究生数学建模竞赛华为杯B题DFT类矩阵的整数分解逼近求解全过程文档及程序

2023年全国研究生数学建模竞赛华为杯 B题 DFT类矩阵的整数分解逼近 原题再现: 一、问题背景   离散傅里叶变换(Discrete Fourier Transform,DFT)作为一种基本工具广泛应用于工程、科学以及数学领域。例如,通信信号…

golang操作mysql利器-gorm

1、傻瓜示例 GORM通过将数据库表中的数据映射到面向对象的模型中,简化了数据库操作,使得开发者可以很方便的使用代码来操作数据库,而无需编写SQL语句。 目前有个mysql表:miniprogram_orders,其存储了所有用户对应的订…

python绘制弦图-科研作图

一、背景 弦图以其直观、精美的展示方式受到越来越多人的关注,它不仅能够有效展示两个变量之间的联系,还能同时展现多个变量间的复杂互动,本文将通过Python语言中的pycirclize库,带你深入了解如何绘制弦图。 弦图是一种圆…

【Java】掌握Java:基础概念与核心技能

文章目录 前言:1. 注释2. 字面量3. 变量详解3.1 变量的定义3.2 变量里的数据存储原理3.3 数据类型3.4 关键字、标识符 4. 方法4.1 方法是啥?4.2 方法的完整定义格式4.3 方法如何使用:4.4 方法的其他形式4.5 方法的其他注意事项4.5.1 方法是可…