下面对比了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将会运行失败。 |