如何设计一个比较通用的爬虫系统

如何设计一个比较通用的爬虫系统

背景介绍

最近老大让我设计一个爬虫系统,主要流程就是用户输入关键字,然后去指定网页去检索结果,并且对结果进行保存,然后把结果发送给指定用户。
根据老大的这个需求,我想了很多事情。

页面差异

首先,这个爬虫解析数据部分肯定要抽取出来,因为不同页面的爬取方式不同。

结果集不同

结果集不同,保存的方法可能也不同。可能有时候让爬取百度搜索的结果,保存标题,url等信息。可能后面要爬文章的信息,文章信息包括标题,内容等,要存到另一个表里面,因此抽出来。

要发送哪些结果给用户

我们这些数据要发送给用户,我们的需求是不能重复发送,可能下次每次都要发送,因此也抽出来。

怎么发送这些数据给用户

我们这次是用邮箱方式发送给用户的,万一下次要发送短信呢,因此也抽出来

项目依赖介绍

Spring Boot
Mybatis
Jsoup
Okhttp

表结构

CRAWL_CONFIG
在这里插入图片描述
这个表用于配置要爬取的网站的信息,结构里定义了结果解析器的bean名

CRAWL_DATA_INFO
在这里插入图片描述
这个表里保存了爬到的数据,我们需要标题,还有url

CRAWL_USER_CONFIG

这里就是配置的用户信息了,用户需要爬取那个网站的信息,关键字是什么,数据怎么获取,数据获取后怎么发送给用户,都在这个表里配置

CRAWL_SENDED_HISTORY
在这里插入图片描述
这里是发送历史表,我们这边的要求是发送过就不再发送

代码类间关系

在这里插入图片描述

在这里插入图片描述
这个接口主要用于解析网站的数据,然后返回结果。不同网站解析结果方式不同,因此抽出来

在这里插入图片描述
这个接口用于对爬取结果的处理,比如我们要保存到xxxx表,然后可能结果不同,然后保存的表也不同,因此抽取

在这里插入图片描述
这个接口用于获取数据,不过这个数据是从表里获取的。根据用户的id,然后去获得需要发送给他的数据。

在这里插入图片描述
获取数据后,需要发送给用户。这个数据的发送就是通过这个接口来实现。可能这次要发送邮件,下次就要发送短信了,抽出来方便拓展

操作流程

在这里插入图片描述
这是爬取数据的流程,首先我需要去用户关注的关键字配置表里面去获得所有有效的用户信息,然后根据用户关注的网站去获得数据解析的bean名,然后去实例容器里面获得bean,然后再调用bean里面的方法来获得数据,然后再获得结果保存类,对结果进行保存(一些安全校验我就没加了,比如接口判断)

在这里插入图片描述
这是对结果进行处理的流程,遍历所有需要发送的用户信息,然后获得数据获取bean实例,调用获得数据集。然后获得结果处理bean实例,对结果进行操作,发送给用户。

整体流程就是这样了,其他代码我就不贴出来了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章