如何设计一个比较通用的爬虫系统
如何设计一个比较通用的爬虫系统
文章目录
- 如何设计一个比较通用的爬虫系统
- 背景介绍
- 页面差异
- 结果集不同
- 要发送哪些结果给用户
- 怎么发送这些数据给用户
- 项目依赖介绍
- 表结构
- 代码类间关系
- 操作流程
背景介绍
最近老大让我设计一个爬虫系统,主要流程就是用户输入关键字,然后去指定网页去检索结果,并且对结果进行保存,然后把结果发送给指定用户。
根据老大的这个需求,我想了很多事情。
页面差异
首先,这个爬虫解析数据部分肯定要抽取出来,因为不同页面的爬取方式不同。
结果集不同
结果集不同,保存的方法可能也不同。可能有时候让爬取百度搜索的结果,保存标题,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实例,对结果进行操作,发送给用户。
整体流程就是这样了,其他代码我就不贴出来了
如何设计一个比较通用的爬虫系统相关推荐
- 如何设计一个复杂的分布式爬虫系统?
一个复杂的分布式爬虫系统由很多的模块组成,每个模块是一个独立的服务(SOA架构),所有的服务都注册到Zookeeper来统一管理和便于线上扩展.模块之间通过thrift(或是protobuf,或是so ...
- 游戏中的技能如何而来? 为ARPG设计一个好用的BUFF系统
转自:游戏中的技能如何而来? 为ARPG设计一个好用的BUFF系统 - GameRes游资网 游戏中有宏大的场景地图,丰富的游戏剧情,逼真的人物角色.但要让角色(职业)炫酷起来,还是要靠各个职业的技能 ...
- 如何设计一个高可用的运营系统
转载自 如何设计一个高可用的运营系统 这是一篇来自粉丝的投稿,作者[林湾村龙猫]近一年在做关于运营活动方面的设计.本文是他的关于运营活动的总结,Hollis做了一点点修改. 概述 一个产品业务的发 ...
- 设计一个脉冲发生器,已知系统时钟为50MHz,生成脉冲宽度为1ms,脉冲间隔可调,最大间隔为1s
设计一个脉冲发生器,已知系统时钟为50MHz,生成脉冲宽度为1ms,脉冲间隔可调,最大间隔为1s Design a pulse generator. The system clock is known ...
- 4.3 设计一个完善的响应式系统
4.3 设计一个完善的响应式系统 关键词 响应系统的工作流程: 当读取操作发生时,将副作用函数收集到"桶"中. 当设置操作发生时,从"桶"中取出副作用函数并执行 ...
- 如何设计一个70w在线人数的弹幕系统?
原文地址: 如何设计一个 70w 在线人数的弹幕系统 ?如何设计一个 70w 在线人数的弹幕系统 ? 无论设计什么系统,身为一个软件架构师要考虑的总归还是资源利用率问题,如何利用最少的资源做出性能最好 ...
- 设计一个亿级高并发系统架构 - 12306火车票核心场景DDD领域建模
" 架设一个亿级高并发系统,是多数程序员.架构师的工作目标. 许多的技术从业人员甚至有时会降薪去寻找这样的机会.但并不是所有人都有机会主导,甚至参与这样一个系统.今天我们用12306火车票购 ...
- 如何设计一个公司级别的消息通知系统?
实际场景 早上买早点,扫码下单,用户在微信中会收到下单成功的服务通知. 扫码出地铁后,手机会收到APP支付通知. 微信.支付宝.刷卡消费后,手机会收到短信通知. 在海底捞吃完火锅,扫结账小票上的开票二 ...
- 教你设计一个接收机和发射机FDD系统
卫星通信.雷达和信号情报(SIGINT)领域的许多航空航天和防务电子系统早就要求使用一部分或全部X和Ku频段.随着这些应用转向更加便携的平台,如无人机(UAV)和手持式无线电等,开发在X和Ku波段工作 ...
最新文章
- exchange 2003配置ASSP 反垃圾邮件
- 【ES6】Generator函数详解
- Java中的String,StringBuilder,StringBuffer三者的区别
- 如何使用graphpad做柱形图_自建房如何做防雷接地?使用什么材料?卫生间等电位如何连接?...
- UA MATH636 信息论7 高斯信道
- 【原创】android——SQLite的cmd命令的基本操作
- sigquit信号默认忽略吗_linux下的信号列表
- springCloud - 第10篇 - 服务间调用追踪 (zipkin 的使用)
- java 三种错误类型 区别_请列举至少三种在java语言中发生“严重错误”的情况...
- 89c52串口发送接收小示例
- php 登录 post,PHP curl post登录到wordpress
- 王不留,混迹基层八年穷屌丝,考研准备四个月,考上中国科技大学MBA,成为一家软件上市公司中层管理者(附备考攻略)
- 和cesuim类似的三维GIS平台_绿城南宁,火红的三维GIS
- 010项目沟通管理和干系人管理
- Java服务优雅停机_微服务架构—优雅停机方案
- 【报告分享】2020中国民营企业500强调研分析报告-全国工商联(附下载)
- 【Verifying transaction: failed】
- 大数据培训课程自定义组件Source
- Code of conduct[行为准则]
- ICASSP 2023论文模型开源|语音分离Mossformer