下面对比了Scrapy爬虫框架中的两个流程——

Scrapy框架的基本运作流程;② Spider或其子类的几个方法的执行流程。

这两个流程是互相联系的,可对比学习。

 

1 ● Scrapy框架的基本运作流程

Scrapy引擎从调度器(Scheduler)中获取一个链接(URL)

Scrapy引擎将上述的URL封装成一个请求对象(Request),并传给下载器(Downloader)

下载器(Downloader)把资源下载下来,并封装成响应对象(Response)

Scrapy引擎从下载器中接收Response对象, 并通过爬虫中间件(Spider Middleware)发送给Spider解析 (Response对象默认交给Spider或其子类的parse方法解析)

如果Response对象解析出实体(Item),则将Item传给实体管道(Item Pipeline)进行持久化等进一步的处理;如果解析出Request对象, 那么将Request对象传给调度器(Scheduler)等待抓取

 

2 ● Spider或其子类的几个方法的执行流程

__init__():初始化爬虫名字和start_urls列表

start_requests() :该方法会调用make_requests_from url(),生成Requests对象,将该对象交给Scrapy引擎的Downloader下载并返回Response对象

parse() : 根据指定的回调函数解析上述的Response对象,并返回Item对象或Request对象,Item传给Item Pipeline进行持久化等进一步的处理,而Request对象传给调度器(Scheduler)等待下载,下载完后由指定的回调函数处理(默认为parse()),一直进行循环,直到处理完所有的数据为止。

Spider的子类CrawlSpider用于全站爬取,当编写爬虫规则(即Rule对象)时,应该避免使用parse作为回调函数,这是因为CrawlSpider使用parse方法来实现其逻辑,如果覆盖了 parse方法,crawl spider将会运行失败。

 

 posted on 2018-02-01 02:22  Arroz  阅读(358)  评论(0编辑  收藏  举报