爬虫架构这样设计,20k Python爬虫大牛都说好,简单好用易扩展

admin 2025-02-24 119人围观 ,发现40个评论

一、前言:

说到数据收集,大家就会想到爬虫,而说到爬虫,目前市场上开源的爬虫很多且非常强大,从单机的到分布式的层出不穷、争奇斗艳。

但是对于学习来说,我还是觉得有必要自己尝试着设计一个爬虫架构,可能你开始没什么想法,此时你可以参考一些优秀的如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就可以了。

目前还在摸索当中,错漏之处还望指出。

需要源码的可以给小编留言哦,喜欢就点下赞哦,谢谢

@著作权归作者所有,转载请联系作者用心写好每一篇文章

猜你喜欢
    不容错过