scrapy框架总执行预览

scrapy是一个基于twisted实现的开源爬虫,要读懂其源码,需要对twisted的异步编程模型有一定了解。可以通过之前3篇deferred的相关教程了解。

下面是总结的执行一个爬虫任务的整体执行流程,请将图片放大查看,即运行"scrapy crawl  xxxSpider"的执行流程:

流程中主要的颜色框的含义如下 :

1.红色框是模块或者类。

2.紫色框是向模块或者类发送的消息,一般为函数调用。

3.红色框垂直以下的黑色框即为本模块或者对象执行流程的伪代码描述。




几个关键的模块和类介绍如下:

cmdline:命令行执行模块,主要用于配置的获取,并执行相应的ScrapyCommand。

ScrapyCommand:命令对象,用于执行不同的命令。对于crawl任务,主要是调用CrawlerProcess的crawl和start方法。

CrawlerProcess:顾名思义,爬取进程,主要用于管理Crawler对象,可以控制多个Crawler对象来同时进行多个不同的爬取任务,并调用Crawler的crawl方法。

Crawler:爬取对象,用来控制一个爬虫的执行,里面会通过一个执行引擎engine对象来控制spider从打开到启动等生命周期。

ExecutionEngine:执行引擎,主要控制整个调度过程,通过twisted的task.LoopingCall来不断的产生爬取任务。




Scrapy是一个强大的Python网络爬虫框架,它的执行流程分为以下几个主要步骤: 1. **项目初始化**:创建一个新的Scrapy项目时,会生成一个基础结构和配置文件,如`settings.py`、`items.py`等。 2. **中间件管道**:请求和响应在整个过程中都会经过一系列中间件(Middleware),这些中间件用于处理请求前的预处理(例如添加User-Agent)、请求中(如重试处理)或响应后(如去重、数据清洗)的操作。 3. **下载器(Downloader)**:负责发送HTTP请求到目标网站。当Spider(即爬虫类)中的`yield Request()`被调用时,Download器开始工作。 4. **下载请求**:下载器接收到请求后,尝试从指定URL获取网页内容。如果成功,将返回一个响应对象。 5. **解析器(Parser)**:解析器处理下载器返回的响应。它根据请求所携带的`callback`属性找到对应的解析规则,通常是定义在`Item Pipeline`中的解析方法,从中提取出所需的数据,并存储为Item对象。 6. **Item Pipeline**:这里是对每个Item对象进一步处理的地方,包括数据验证、存储(如数据库、CSV文件等)、转换等操作。 7. **Spider解析**:在解析器中,Spider会执行其自定义的方法,通常包含对解析结果的处理和新的Request的生成,这一步可能会递归进行,形成深度优先搜索或广度优先搜索。 8. **错误处理**:整个过程如果遇到异常,Scrapy会捕获并记录下来,可以根据设置选择是否继续执行,或者按照错误策略(如忽略、重新尝试等)处理。 9. **循环与调度**:如果还有未完成的请求(例如,由于超时或重试限制),Scrapy会在下载器和中间件队列中调度这些请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值