一、前言:
说到数据收集,大家就会想到爬虫,而说到爬虫,目前市场上开源的爬虫很多且非常强大,从单机的到分布式的层出不穷、争奇斗艳。
但是对于学习来说,我还是觉得有必要自己尝试着设计一个爬虫架构,可能你开始没什么想法,此时你可以参考一些优秀的如python爬虫scrapy,java爬虫WebMagic,当然WebMagic的设计思想也部分来自于scrapy。
本次,我说介绍的架构可能很漏,但是确是通过思考后自己设想并付诸实践整理出来的,其中也参考了webmagic的模块化思想。
二、模块设计图
结构模块
其主要分为五个模块
1、spider:负责与用户交互的模块,配置启动url,代理、数据解析等功能
2、scheduler:负责请求链接的管理调度,目前只是实现了基本的存储获取,后续会扩展为支持各种调度策略的一个模块
3、download:下载模块,负责资源的下载,数据的缓存等。
4、pipeline:数据通道,实现很简单,对抽取出来的数据做存储或者分析之用。
5、engine:引擎,负责调度四个类型的模块进行运转。
三、代码详解
创建四个Base类来分别定义spider、scheduler、download、pipeline的方法字段标准
BaseSpider
BaseScheduler
BaseDownload
BasePipeline
OK,如果后续需要实现不同的爬虫、下载器、调度器、数据管道则通过继承上面的base类,起到规范的作用。
OK,我们来看下目前的目录结构:
base:存储base类
mode:存储构建过程中定义的一些类型结构
module:存储默认的几个类,如默认的下载器、默认的调度器、默认的管道
spider:存放爬虫代码
utils:存储一个辅助工具类
最外围为我们的engine类。
我们先看下引擎类的代码,目前代码还是比较简单的。
里面先从spider中获取seedUrl传入scheduler,然后就进行while循环从scheduler中不断取出url。代码很简单。
默认模块的实现代码略多点,照片也不阅读也不方便,需要源码地址的可以给小编留言,小编会贴上源码github地址给大家哦。
如此便完成了单机单线程版的爬虫架构。
虽然是但鸡蛋线程,但是通过这样子设计,后续扩展为多进程多线程,甚至分布式。
例如,我们的spider可以是多个的,根据spider名字对应指定的pipeline,download、scheduler可以是公用的。为实现改需求,我们改动的地方主要的engine就可以了。
目前还在摸索当中,错漏之处还望指出。
需要源码的可以给小编留言哦,喜欢就点下赞哦,谢谢
@著作权归作者所有,转载请联系作者用心写好每一篇文章
版权所有 © Copyright © 2002-2030 龙辉游戏资讯网站地图