Scrapy是一个python的爬虫架构,但是这个架构的工作原理是怎么的呢?也就是说,Scrapy的框架是怎么样的。网上已经有很多博文说这个框架了,但是我想用另外一种方法来讲述。
话说有一天,我想写一个爬虫。爬虫,说白了就是去互联网上下载东西,然后提取下载下来的页面中有用的字段。这件事怎么说也是一个工程吧,作为一个工程师,好吧,就是一个码农,你的模块化思想应该体现出来了。
下载东西和提取页面中需要的字段就是两个模块了。我们命名为Downloader和Dealer。
提取出来东西了,我们得考虑怎么存储吧,所以我们再引入一个模块,用来后续加工。加工数据流就像是数据流通过管道一样,所以,我们把这个对数据做后期存储、验证的模块叫做Pipline。
我们的框架建立好了,爬虫开始出发了!
爬虫很开心,但是,不一会儿,爬虫就不知道该往哪里去了,因为爬了一个网页后,没有人告诉这个爬虫下一步应该去哪里。我们的Dealer模块是可以提取“下一页”这样的链接的,但是他并没有安排给爬虫去进行下一次爬取的任务。所以,我们需要一个调度系统,Dealer模块一有“下一页”就把网页地址给这个调度器,调度器再去安排给Downloader去下载。这个调度器模块我们就叫做Scheduler。
最后,这四个模块需要协调工作,所以我们再设立一个用来统领的模块,叫做Engine。
铛铛铛铛,这是scrapy官方的框架图,如果把我们自己意淫出来的模块中的Dealer改成Spider,两个框架就一样了!
Scrapy和我们之前想的一样哦!这里的Downloader Middleware和Spider Middleware就是数据传输的中间件,把他们当做管道就可以了,只不过我们可以在这两个管道里面做点小动作罢了。