软件系统设计方案--爬虫
1、概述
本篇文章主要是针对豆瓣网的电影相关信息进行爬取的爬虫程序,针对这个爬虫项目,进行软件系统分析和设计,给出项目的完整设计方案,总结其中的软件结构特点及接口API,采用合适的UML图描述软件系统概念原型的不同视图等,最终形成软件系统概念原型。
关于对豆瓣内容的爬取,首先可以打开网址https://movie.douban.com/top250如下:

2、项目设计方案
2.1、网络爬虫简介
网页爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本;其使用场景极其广泛,各大搜索引擎(如百度,谷歌,Bing)中都有他们的身影。网络爬虫按照系统结构和实现技术,大致分为以下几种类型:通用网络爬虫,聚焦网络爬虫,增量式网络爬虫,深层网络爬虫。
2.2、系统架构
架构模式,也叫架构风格,一个架构模式描述软件系统里的基本的结构组织或纲要。架构模式提供一些呈先定义好的子系统,指定它们的责任,并给出把它们组织在一起的法则和指南。一个架构模式常常可以分解成很多个设计模式的联合使用。
管道过滤器模式(PIPE-AND-FILTER):
按照《POSA(面向模式的软件架构)》里的说法,管道过滤器(Pipe-And-Filter)应该属于架构模式,因为它通常决定了一个系统的基本架构。管道过滤器和生产流水线类似,在生产流水线上,原材料在流水线上经一道一道的工序,最后形成某种有用的产品。在管道过滤器中,数据经过一个一个的过滤器,最后得到需要的数据。
管道负责数据的传递,它把原始数据传递给第一个过滤器,把一个过滤器的输出传递给下一个过滤器,作为下一个过滤器的输入,重复这个过程直到处理结束。要注意的是,管道只是对数据传输的抽象,它可能是管道,也可能是其它通信方式,甚至什么都没有(所有过滤器都在原始数据基础上进行处理)。
过滤器负责数据的处理,过滤器可以有多个,每个过滤器对数据做特定的处理,它们之间没有依赖关系,一个过滤器不必知道其它过滤器的存在。这种松耦合的设计,使得过滤器只需要实现单一的功能,从而降低了系统的复杂度,也使得过滤器之间依赖最小,从而以更加灵活的组合来实现新的功能。

2.3、设计模式
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。、
设计模式的分类:
创建型模式:
- 工厂模式(Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 单例模式(Singleton Pattern)
- 建造者模式(Builder Pattern)
- 原型模式(Prototype Pattern)
结构型模式:
- 适配器模式(Adapter Pattern)
- 桥接模式(Bridge Pattern)
- 过滤器模式(Filter、Criteria Pattern)
- 组合模式(Composite Pattern)
- 装饰器模式(Decorator Pattern)
- 外观模式(Facade Pattern)
- 享元模式(Flyweight Pattern)
- 代理模式(Proxy Pattern)
行为型模式:
- 责任链模式(Chain of Responsibility Pattern)
- 命令模式(Command Pattern)
- 解释器模式(Interpreter Pattern)
- 迭代器模式(Iterator Pattern)
- 中介者模式(Mediator Pattern)
- 备忘录模式(Memento Pattern)
- 观察者模式(Observer Pattern)
- 状态模式(State Pattern)
- 空对象模式(Null Object Pattern)
- 策略模式(Strategy Pattern)
- 模板模式(Template Pattern)
- 访问者模式(Visitor Pattern)
J2EE 模式:
- MVC 模式(MVC Pattern)
- 业务代表模式(Business Delegate Pattern)
- 组合实体模式(Composite Entity Pattern)
- 数据访问对象模式(Data Access Object Pattern)
- 前端控制器模式(Front Controller Pattern)
- 拦截过滤器模式(Intercepting Filter Pattern)
- 服务定位器模式(Service Locator Pattern)
- 传输对象模式(Transfer Object Pattern)
设计模式之间的关系:

而本项目中使用的正是责任链模式:
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。
在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

3、数据库设计或核心的数据结构设计
该爬虫项目使用MongoDB作为数据库
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
3.1、数据库设计

3.2、数据库接口设计
# 1. 爬取网页 def getData(baseurl):
# 2. 逐一解析数据 def parseData(html):
# 3. 保存数据 def saveData(datalist, savepath):
# 4. 获取数据 def showData():
3.3、目录结构设计

4、项目类图
4.1、分解视图

把上一步返回的信息用BeautifulSoup模块进行分析,如果还需要进一步匹配过滤,传给re模块进一步加工,否则直接传给mongodb模块;
re模块对BeautifulSoup传过来的信息进行匹配处理,最后传给mongodb;
用mongodb连接mongo数据库,将获得的书籍信息持久化到mongo中;
用logging模块负责系统日志的输出和维护。
4.2、依赖视图
依赖视图体现了各个模块间的相互依赖关系。

4.3、执行视图
执行视图体现了该项目在逻辑上的具体步骤,展示了系统运行时的时序结构特点,比如流程图、时序图等。


4.4、工作分配视图
工作分配视图将系统分解成可独立完成的工作任务,以便分配给各项目团队和成员。

4.5、用例图
用例图是指由参与者(Actor)、用例(Use Case),边界以及它们之间的关系构成的用于描述系统功能的视图。用例图(User Case)是外部用户(被称为参与者)所能观察到的系统功能的模型图。用例图是系统的蓝图。用例图呈现了一些参与者,一些用例,以及它们之间的关系,主要用于对系统、子系统或类的功能行为进行建模。

5、技术选型概述
开发环境:window10
开发工具:python、python IDE(Pycharm)、Mongodb数据库
使用python语言作为项目的主要语言。基于urllib库实现爬虫的爬取,旨在快速、便捷的实现一个有一定并发量的爬取数据部分。数据存储部分则使用MongoDB非关系型数据库来存储获得到的数据。实现前后端的分离操作。前端展示主要利用Flask-Mongo框架,搭载简单的前端html页面,展示爬取后存入Monodb数据库中的内容。

浙公网安备 33010602011771号