强大的爬虫框架 Scrapy

简介: 本节来介绍一个强大的爬虫框架 Scrapy。Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求。

本节来介绍一个强大的爬虫框架 Scrapy。Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求。

1. Scrapy的架构

Scrapy 的架构图如下所示:

网络异常,图片无法展示
|

下面对上图中的各个组件做介绍:

1. Engine:引擎负责控制数据流在系统所有组件中流动,并在相应动作发生时触发事件。
2. Scheduler:调度器从引擎接受request并将他们入队,以便之后引擎请求他们时提供给引擎。
3. Downloader:下载器负责获取页面数据并提供给引擎,而后提供给spider。
4. Spiders:Spider 是 Scrapy 用户编写用于分析 response 并提取 item(即获取到的 item)或额外跟进的 URL 的类。 每个 spider 负责处理一个特定(或一些)网站。
5. Item Pipelines:Item Pipeline 负责处理被 spider 提取出来的 item。典型的处理有清理、 验证及持久化(例如存取到数据库中)。
6. Downloader Middlewares:下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理 Downloader 传递给引擎的 response。 其提供了一个简便的机制,通过插入自定义代码来扩展 Scrapy 功能。
7. Spider Middlewares:Spider 中间件是在引擎及 Spider 之间的特定钩子(specific hook),处理 spider 的输入(response)和输出(items 及 requests)。 其提供了一个简便的机制,通过插入自定义代码来扩展 Scrapy 功能。

2.组件间的数据流

上述各个组件间的数据流由执行引擎控制,其过程如下:

  1. 引擎从爬虫得到初始请求。
  2. 引擎在调度器中调度请求,并请求下一个要爬取的请求。
  3. 调度器返回引擎下一个要爬取的请求。
  4. 通过下载中间件,引擎将请求发送到下载器。
  5. 页面下载完毕之后,下载器生成一个该页面的响应,并通过下载中间件发送给引擎。
  6. 引擎收到来自下载器的响应,并通过爬虫中间件,将它发送到爬虫进行处理。
  7. 爬虫处理响应,而后通过爬虫中间件将抓取到的 items 和新的请求返回到引擎。
  8. 引擎将处理好的items发送到Item Pipelines,然后发送已处理的请求到调度器,并询问下个可能的请求。
  9. 这个过程重复进行(从1开始),直到调度器没有更多的请求。

3.项目创建

我们可以通过命令行来创建一个 Scrapy 项目,命令为scrapy startproject hello_scrapy ,其中 hello_scrapy 为项目名称。创建的 Scrapy 项目的文件结构如下所示:

网络异常,图片无法展示
|

各个文件的功能为:

  1. scrapy.cfg:它是 Scrapy 项目的配置文件,其内定义了项目的配置文件路径、部署相关信息等内容。
  2. items.py:它定义 Item 数据结构,所有的 Item 的定义都可以放这里。
  3. middlewares.py:它定义 Spider Middlewares 和 Downloader Middlewares 的实现。
  4. pipelines.py:它定义 Item Pipeline 的实现,所有的 Item Pipeline 的实现都可以放这里。
  5. settings.py:它定义项目的全局配置。
  6. spiders:其内包含一个个 Spider 的实现,每个 Spider 都有一个文件。
相关文章
|
6月前
|
数据采集 存储 数据可视化
分布式爬虫框架Scrapy-Redis实战指南
本文介绍如何使用Scrapy-Redis构建分布式爬虫系统,采集携程平台上热门城市的酒店价格与评价信息。通过代理IP、Cookie和User-Agent设置规避反爬策略,实现高效数据抓取。结合价格动态趋势分析,助力酒店业优化市场策略、提升服务质量。技术架构涵盖Scrapy-Redis核心调度、代理中间件及数据解析存储,提供完整的技术路线图与代码示例。
556 0
分布式爬虫框架Scrapy-Redis实战指南
|
4月前
|
数据采集 存储 监控
Scrapy框架下地图爬虫的进度监控与优化策略
Scrapy框架下地图爬虫的进度监控与优化策略
|
5月前
|
数据采集 存储 Web App开发
轻量级爬虫框架Feapder入门:快速搭建企业级数据管道
本教程基于Feapder框架,讲解如何构建轻量级爬虫采集豆瓣电影数据。通过配置代理IP、Cookie与User-Agent,实现企业级数据管道能力,包括动态请求与信息提取(如电影名称、导演、演员等)。适合具备Python基础及爬虫原理知识的读者,提供从环境搭建到代码实现的完整流程,并分析常见错误与解决方法,助力高效开发。
222 1
轻量级爬虫框架Feapder入门:快速搭建企业级数据管道
|
10月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
405 6
|
10月前
|
数据采集 前端开发 中间件
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第26天】Python是一种强大的编程语言,在数据抓取和网络爬虫领域应用广泛。Scrapy作为高效灵活的爬虫框架,为开发者提供了强大的工具集。本文通过实战案例,详细解析Scrapy框架的应用与技巧,并附上示例代码。文章介绍了Scrapy的基本概念、创建项目、编写简单爬虫、高级特性和技巧等内容。
441 4
|
10月前
|
数据采集 中间件 API
在Scrapy爬虫中应用Crawlera进行反爬虫策略
在Scrapy爬虫中应用Crawlera进行反爬虫策略
|
11月前
|
消息中间件 数据采集 数据库
小说爬虫-03 爬取章节的详细内容并保存 将章节URL推送至RabbitMQ Scrapy消费MQ 对数据进行爬取后写入SQLite
小说爬虫-03 爬取章节的详细内容并保存 将章节URL推送至RabbitMQ Scrapy消费MQ 对数据进行爬取后写入SQLite
159 1
|
5月前
|
数据采集 测试技术 C++
无headers爬虫 vs 带headers爬虫:Python性能对比
无headers爬虫 vs 带headers爬虫:Python性能对比
|
5月前
|
数据采集 存储 监控
Python 原生爬虫教程:网络爬虫的基本概念和认知
网络爬虫是一种自动抓取互联网信息的程序,广泛应用于搜索引擎、数据采集、新闻聚合和价格监控等领域。其工作流程包括 URL 调度、HTTP 请求、页面下载、解析、数据存储及新 URL 发现。Python 因其丰富的库(如 requests、BeautifulSoup、Scrapy)和简洁语法成为爬虫开发的首选语言。然而,在使用爬虫时需注意法律与道德问题,例如遵守 robots.txt 规则、控制请求频率以及合法使用数据,以确保爬虫技术健康有序发展。
688 31
|
4月前
|
数据采集 存储 NoSQL
分布式爬虫去重:Python + Redis实现高效URL去重
分布式爬虫去重:Python + Redis实现高效URL去重

热门文章

最新文章