Scrapy爬虫框架介绍、创建Scrapy项目

embedded/2024/9/24 10:19:17/

Scrapy官网:https://scrapy.org/

什么是Scrapy

Scrapy 是一个基于 Python 的快速的高级网页抓取和网页爬取框架,用于抓取网站并从其页面中提取结构化数据。它可用于多种用途,从数据挖掘到监控和自动化测试。

Scrapy核心组件

  • 1. Scrapy Engine(Scrapy引擎)
    • Scrapy 引擎是整个系统的核心,负责控制数据流在所有组件之间的流动。它从调度器获取请求,发送给下载器处理,然后将下载器返回的响应交给爬虫处理。
  • 2. Scheduler(调度器)
    • 调度器负责接收引擎发来的请求并进行排序,然后将这些请求发送给引擎。调度器可以处理优先级,并且支持去重机制以避免重复抓取。
  • 3. Downloader(下载器)
    • 下载器负责向互联网上的服务器发送请求,并接收响应。Scrapy 下载器是高度异步的,能够高效地处理大量请求。
  • 4. Spiders(爬虫)
    • 爬虫是用户定义的类,负责处理下载器返回的响应,从中提取数据(Item)或进一步生成请求。每个爬虫定义了要抓取的域名和处理响应的逻辑。
  • 5. Item(数据项)
    • Item 是一种简单的数据容器,用于存储从网页中提取的数据。Item 类似于字典,但提供了额外的保护和方法。
  • 6. Item Pipeline(数据管道)
    • 数据管道是一个序列化系统,用于处理和存储从爬虫中提取的数据。每个管道组件负责处理数据项的一部分,例如数据清洗、验证或存储。
  • 7. Downloader Middlewares(下载中间件)
    • 下载中间件是介于调度器和下载器之间的钩子,用于处理请求和响应。它们可以修改或扩展请求和响应的处理流程,例如设置代理、修改请求头等。
  • 8. Spider Middlewares(爬虫中间件)
    • 爬虫中间件是介于引擎和爬虫之间的钩子,用于处理爬虫输入和输出的响应和结果。它们可以修改或扩展爬虫的处理流程,例如添加额外的日志记录、处理异常等。

Scrapy扩展组件

  • 1. Feed Exports(数据导出)
    • Scrapy 支持将抓取的数据导出为多种格式(如 JSON、CSV、XML),并可以配置导出的细节(如字段顺序、编码等)。
  • 2. Telnet Console(Telnet 控制台)
    • Telnet 控制台提供了一个实时监控和调试爬虫的工具,允许开发者在爬虫运行时进行交互式调试。
  • 3. Logging(日志)
    • Scrapy 内置了强大的日志系统,用于记录运行时的各种信息,如调试信息、错误消息等。日志系统可以配置不同的日志级别和输出格式。
  • 4. Extensions(扩展)
    • 扩展模块用于增强 Scrapy 的功能,例如自动重试失败的请求、监控爬虫性能等。开发者可以自定义扩展模块以满足特定需求。
  • 5. Stats Collectors(统计收集器)
    • 统计收集器用于收集和记录爬虫运行时的各种统计信息,如请求数量、响应时间等。统计信息可以用于优化和调试爬虫。

组件交互流程

  1. 初始请求:爬虫从 start_urls 生成初始请求,并通过引擎(Engine)发送给调度器(Scheduler)。
  2. 请求调度:调度器(Scheduler)将请求排序并发送给下载器(Downloader)。
  3. 请求下载:下载器(Downloader)向目标网站(Internet)发送请求并获取响应。
  4. 响应处理:下载器(Downloader)将响应发送给引擎(Engine),进而交给爬虫(Spiders)处理。
  5. 数据提取:爬虫(Spiders)从响应中提取数据项,并生成新的请求(如果有)。
  6. 数据处理:提取的数据项通过数据管道(Item Pipeline)进行处理和存储。

安装Scrapy

pip install scrapy

Scrapy项目目录结构说明

Scrapy 项目的结构较为标准,以下是一个典型的 Scrapy 项目的目录结构图示及其简要说明,供方便理解。

myproject/
│
├── myproject/                 # 项目目录(主目录)
│   ├── __init__.py            
│   ├── items.py               # 定义 Item 类(数据结构)
│   ├── middlewares.py         # 自定义中间件
│   ├── pipelines.py           # Item 处理管道
│   ├── settings.py            # 项目设置文件
│   ├── spiders/               # 存放爬虫的目录
│   │   ├── __init__.py        
│   │   ├── example_spider.py  # 定义爬虫
│
├── scrapy.cfg                 # Scrapy 配置文件
│
└── README.md                  # 项目的说明文件(可选)

创建Scrapy项目

使用 scrapy startproject 命令来创建一个新的 Scrapy 项目。打开终端或命令行,进入你想要创建项目的目录,并运行以下命令

# scrapy startproject <项目名称>
scrapy startproject myproject


创建爬虫

在项目根目录中,你可以使用 scrapy genspider 命令创建新的爬虫。以下命令将创建一个名为 baidu 的爬虫,用于抓取 www.baidu.com 的域名

# scrapy genspider <爬虫名称> <允许爬取的域名>
scrapy genspider baidu www.baidu.com

完整目录结构如下

爬虫文件内容说明

解析方法解析response

# 解析方法,response:爬取起始url的响应
def parse(self, response):# 解析示例with open("baidu.html", "wb") as f:f.write(response.body)

运行爬虫

运行爬虫之前需要修改 settings.py 配置文件的配置,如下:

使用 scrapy crawl 命令来运行你的爬虫。以下命令会启动名为 baidu 的爬虫:

# scrapy crawl <爬虫名称>
scrapy crawl baidu


http://www.ppmy.cn/embedded/92873.html

相关文章

2024.08.02校招 实习 内推 面经

地/球&#x1f30d; &#xff1a; neituijunsir 交* 流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 加入蔚来智能制造&#xff0c;在蔚来预见未来&#xff08;内推&#xff09; 校招 | 加入蔚来智能制造&#xff0c;在蔚来预见未来&#xff08;内推&#xff09; 2、…

使用s3cmd 2.x 与 Cyberduck 管理在 DigitalOcean Spaces 对象存储中的数据

有很多用户在使用 DigitalOcean Spaces 对象存储的过程中&#xff0c;还没有找到一个合适的数据管理工具。其实目前有很多开源工具都可以使用&#xff0c;比如 s3cmd、Cyberduck、rclone、transmit5。Cyberduck 提供了直观的图形用户界面&#xff0c;而 s3cmd 2.x 则擅长于批处…

【Redis】全局命令/内部编码/浅谈单线程模型

目录 前言 两个核心命令 GET和SET 全局命令 KEYS EXISTS DEL EXPIRE TTL TYPE 数据结构的内部编码 Redis的5中数据类型 Redis数据结构和内部编码 单线程架构 前言 Redis 提供了 5 种数据结构&#xff0c;理解每种数据结构的特点对于 Redis 开发运维⾮常重要&a…

计算机网络-CSP初赛知识点整理

历年真题 [2016-NOIP-普及-第3题] 以下不属于无线通信技术的是( ) A. 蓝牙 B. Wifi C. GPRS D. 以太网 [2015-NOIP-普及-第10题] FTP 可以用于( )。 A. 远程传输文件 B. 发送电子邮件 C. 浏览网页 D. 网上聊天 [2019-CSP-J-第1题] 中国的国家顶级域名是( ). A. .cn B. .ch C.…

视频美颜SDK与直播插件的实现原理及优化方案详解

今天&#xff0c;小编将深入探讨视频美颜SDK与直播插件的实现原理&#xff0c;并提供一些优化方案。 一、视频美颜SDK的实现原理 视频美颜SDK主要依赖于图像处理技术&#xff0c;借助实时滤镜、图像增强和人脸检测等算法&#xff0c;为用户提供动态的美颜效果。其核心实现原理…

大模型笔记5 Extractive QA任务评估

目录 Extractive QA任务评估 Extractive QA评测指标 precision, recall, f1 ROUGE 划分训练与评估数据集 token位置评估 单个token位置评估 输入label的token位置 预测token位置 评估 Wandb 共享机器同时登录 样本类别平衡 标记token label时对窗口进行筛选 训练…

JavaEE: 查看线程信息

示例用代码 public class Main {static class MyThread extends Thread {Overridepublic void run() {while (true) {System.out.println("hello thread");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}}}}public st…

【ZooKeeper】ZooKeeper快速入门

1.ZooKeeper的概念 Zookeeper 是 Apache Hadoop 项目下的一个子项目&#xff0c;是一个树形目录服务。Zookeeper 翻译过来就是动物园管理员&#xff0c;它是用来管 Hadoop&#xff08;大象&#xff09;、Hive&#xff08;蜜蜂&#xff09;、Pig&#xff08;小猪&#xff09;的管…