@@ -1,5 +1,21 @@ | |||||
思通舆情 是一款开源免费的舆情系统,支持本地化部署。支持对海量舆情数据分析和挖掘。 | 思通舆情 是一款开源免费的舆情系统,支持本地化部署。支持对海量舆情数据分析和挖掘。 | ||||
<br> | <br> | ||||
无论你是使用者还是共同完善的开发者,欢迎 pull request 或者 留言对我们提出建议。 | |||||
<br> | |||||
您的支持和参与就是我们坚持开源的动力!请 :star: [star](https://gitee.com/stonedtx/yuqing) 或者 [fork](https://gitee.com/stonedtx/yuqing)! | |||||
<br> | |||||
无论你是有相关经验、技术可以一起加入我们的开源项目。 | |||||
<br><br> | |||||
同时还会将我们的项目计划和关键性技术讲解,毫无保留的公布于众,让大家对我们有更多的认识和了解。<br> | |||||
想了解更多,可以看这两篇文章: | |||||
[【数据采集】技术架构说明文档](https://gitee.com/stonedtx/yuqing/blob/master/dataCollection.md) 和 [【数据处理】技术架构说明文档](https://gitee.com/stonedtx/yuqing/blob/master/dataProcessing.md) 。 | |||||
<br> | |||||
<br><br> | |||||
### 思通舆情 的功能: | ### 思通舆情 的功能: | ||||
@@ -73,11 +89,16 @@ | |||||
- 舆情数据处理 和 舆情数据采集,目前(2022-2-19)文档和代码正在规整中。 | - 舆情数据处理 和 舆情数据采集,目前(2022-2-19)文档和代码正在规整中。 | ||||
- 舆情数据处理 ,预计会在2022年3月份先提到开源社区。 | |||||
[【数据处理】技术架构说明文档](https://gitee.com/stonedtx/yuqing/blob/master/dataProcessing.md) | |||||
### 舆情数据处理 | |||||
- 舆情数据采集 ,目前待定。 | |||||
- 文档预计在2022年3月份提到开源社区。 | |||||
[【数据处理】技术架构说明文档](https://gitee.com/stonedtx/yuqing/blob/master/dataProcessing.md) | |||||
### 舆情数据采集 | |||||
- 目前正在整理编写文档,正式发布时间待定。 | |||||
[【数据采集】技术架构说明文档](https://gitee.com/stonedtx/yuqing/blob/master/dataCollection.md) | |||||
## 在线体验 | ## 在线体验 | ||||
@@ -0,0 +1,128 @@ | |||||
# 开源舆情 【数据采集】部分技术架构说明文档 | |||||
<br> | |||||
## 项目简述 | |||||
爬虫,在很多人眼里很简单、廉价一点都不奇怪,因为网上有大量9.9块Python培训课,其中包含爬虫教学。 | |||||
爬虫,在多数人眼里是灰色产业,这也不奇怪。中国在2019年出现了很多“大数据”公司,他们采用了爬虫技术窃取用户隐私。 | |||||
但是,爬虫,一词对我们来说是一门博大精深的技术,掌握这门技术是不容易的,这门技术更不是为灰色产业服务的。 | |||||
<br> | |||||
爬虫,一词,让我直接的联想到的是Google以及很多顶尖技术和团队,绝不是灰色产业和简单的技术。 | |||||
<br><br> | |||||
传说中,美国中央情报局(CIA)创建了一个开放源代码中心负责收集,研发生产和推广[开源情报(OSINT)](https://wiki.mbalib.com/wiki/%E5%BC%80%E6%BA%90%E6%83%85%E6%8A%A5),而开源情报的90%大部分数据来源就是互联网和公开数据源。 | |||||
因此,2021年末,我们给爬虫技术和数据采集,有了一个新的定义: **[开源情报(OSINT)](https://wiki.mbalib.com/wiki/%E5%BC%80%E6%BA%90%E6%83%85%E6%8A%A5)** 。 | |||||
<br> | |||||
大多数创业团队初期都是手工作坊。 | |||||
在2017年初,我们跟其他的团队也没有例外。 | |||||
刚刚开始抓取互联网数据的时候,我们采用的是最原始的代码开发java和Python。 | |||||
由于,我们的运气和勤劳 团队和名气慢慢变大,手工作坊的模式反而给我们带来巨大的维护成本以及极低的稳定性。 | |||||
<br><br> | |||||
于是,我们狠下心来,开始研发一套可以管理分布式的爬虫系统,我们定义为: **爬虫工厂** 。 | |||||
梦想总是美好的,现实总是残酷的。 | |||||
在研发的过程中我们一次次的试错和尝试,让我们积累了很多经验与总结。 | |||||
截止积累到2021年9月份, | |||||
我们最后决定将之前研发的系统重新定义和研发,代号为: **发动机计划** 。 | |||||
最后,到2021年12月份, | |||||
推到,重来,再推到,再重来.... 整个项目设计方案过了3个月才完成,目前我们还在砺砺前行。 | |||||
迄今为止,我们对此的投入的研发费用早已超过的一辆劳斯莱斯汽车的售价。 | |||||
我们相信: **把任何事情做到极致,就是一门艺术!** | |||||
## 开源技术栈 | |||||
- SpringBoot | |||||
- HttpClient | |||||
- webMagic | |||||
- Spider-flow | |||||
- Redis | |||||
- MySQL | |||||
<br><br> | |||||
## 信源管理 | |||||
信源,信息来源简称。 | |||||
<br><br> | |||||
我们需要对采集 类型,内容,平台,地区 等多种属性进行管理。我们对此开发了三代管理平台。 | |||||
## 站点画像 | |||||
采用模拟浏览器请求技术实现深度和广度抓取算法,总体分3个环节,对整个站点进行 1)全站扫描、2)数据储存、3)特性分析。 <br> | |||||
- siteMeta <br> | |||||
识别整个网站的结构,并且解析存储,给每一个抓取的网站都建立一个“小档案”库。 <br><br> | |||||
- siteIndex <br> | |||||
在识别基础上把所有网页都预存储下来,并且提取各种特征值进行分析计算,从站点目录,到站点栏目,以及每个抓取目标页面都会标记不同的特性参数。 <br><br> | |||||
- siteFeatures<br> | |||||
最后将整体分析演算的结果,还原成这个网站的抓取画像和特性,以便于机器将会知道采用哪种抓取策略自动去匹配这个网站的特性抓取,基于这样的设计可以实现大规模数据采集无人值守的效果,也就是百度、谷歌 这些大型搜索引擎实现的数据效果。<br> | |||||
用“探头机器人”对整个网站预抓取一遍,相当于一个先头部队,把抓取网站的情况搞清楚以后,很快机器就知道采取哪种采集策略,大量需要采集的网站,只有极小的部分需要人工干预采集,而且更不需要编写一行爬虫采集代码,完全是自动化及低代码化大规模数据采集。 | |||||
## 数据抓取 | |||||
- 自动抓取 <br> | |||||
有了网站的画像属性,就知道匹配那种采集抓取策略了,大部分网站就能自动抓取就自动识别抓取数据,无需人工干预。<br><br> | |||||
- 人工配置 <br> | |||||
有的网站抓取难度大,采用可视化技术将整个站点的标签提取出来给开发工程师,他们将可以快速的对网站的抓取进行配置。 | |||||
我们在采集任何一个网站的时候将会有各种“探头”对网站的结构,广告位,关键性内容,导航栏,分页,列表,站点特性,站点数据量,抓取难易度,站点更新频率,等等。 | |||||
## 数据暂存 | |||||
如果把数据直接储存到系统大数据库里,一旦有大量采集的脏数据下来就是浪费时间和精力,所有数据都会预演储存一遍,储存完成后会有程序对此核对监测,以免数据字段漏存,错存。如果在暂存环节发现储存错误,将会及时对研发工程师提醒,告知错误内容,让其对此修正。 | |||||
<br><br> | |||||
## 分布式采集 | |||||
- 控制器 | |||||
- 分发器 | |||||
- 执行器 | |||||
<br><br> | |||||
## 低代码配置 | |||||
<br><br> | |||||
## 爬虫管理 | |||||
<br><br> | |||||
## 反爬策略 | |||||
<br><br> | |||||
## 采集日志 | |||||
- 日志跟踪ID | |||||
<br><br> | |||||
- 数据生命周期 | |||||
<br><br> | |||||
## 数据解析 | |||||
- 自动解析 | |||||
<br><br> | |||||
## 数据储存 | |||||
通过kafka中间件将数据通过消息的形式发送给储存端子系统。 | |||||
<br><br><br><br> |
@@ -10,17 +10,28 @@ | |||||
(开源技术清单) | (开源技术清单) | ||||
## 总体技术架构 | |||||
## 技术架构 | |||||
(思维导图) | (思维导图) | ||||
## 数据处理流程 | |||||
![输入图片说明](ProIMG/20220219-234818.png) | |||||
## 数据总线 | ## 数据总线 | ||||
通过SmarterAPI与Elasticsearch对接,将内部整套数据处理流程完成后对外输出。 | |||||
## 数据去重 | ## 数据去重 | ||||
采用了redis集群 | |||||
- URL去重 | |||||
采用了redis集群 | |||||
- 内容去重 | |||||
采用Elasticsearch内部的查询将文章标题一样的内容检索过滤掉。 | |||||
## 数据清洗 | ## 数据清洗 | ||||
自动提取字段,标题、正文、时间、作者、来源 等。 | 自动提取字段,标题、正文、时间、作者、来源 等。 | ||||
@@ -29,7 +40,7 @@ | |||||
## 数据标记 | ## 数据标记 | ||||
### 实体识别 | ### 实体识别 | ||||
HaNLP | |||||
- 在HaNLP的基础上进行训练和二次开发,在实战的过程中收集数据样本以及对数据样本标注是最痛苦的事情,为此,我们还开发了一款可以辅助人工标记的工具。 | |||||
### 情感分析 | ### 情感分析 | ||||
百度飞桨 | 百度飞桨 | ||||
@@ -43,20 +54,52 @@ | |||||
### 相似文章 | ### 相似文章 | ||||
将文章通过“海明距离”算法生成加密串码存储在clickhouse集群中,通过clickhouse距离查询方法实现,文章相似度聚类。 | |||||
### 事件分类 | ### 事件分类 | ||||
自研算法 | |||||
- 自研算法 | |||||
### 行业分类 | ### 行业分类 | ||||
自研算法 | |||||
- 自研算法 | |||||
## 数据存储 | ## 数据存储 | ||||
分为多个部分存储,MySQL、redis、kafak、ES、mongodb、clickhouse | |||||
为了储存海量的数据,同时还能保证系统的性能和运行效率,我们将一条数据储存了多份,用储存空间换取查询时间。 | |||||
- MySQL | |||||
在系统中储存两部分相关的信息内容,系统配置和临时脏数据储存。 | |||||
- redis | |||||
在系统中除了作为系统缓存,还作为站点数据采集的index索引库。 | |||||
- kafak | |||||
由于数据处理的过程比较多,而且数据量很大,因此采用分布式以及异步的方式对海量数据加工处理。 | |||||
- Elasticsearch | |||||
储存加工好的数据,以及打上各种标签的数据,储存在分布式搜索中,这样便于用户对数据的检索。 | |||||
- MongoDB | |||||
带样式的文章正文原始网页储存在MongoDB中。 | |||||
- Clickhouse | |||||
将每篇文章指纹及海明距离储存在clickhouse中,以便于对相似度和文章主题聚类的计算。 | |||||
## 数据运维 | ## 数据运维 | ||||
### 数据清理 | ### 数据清理 | ||||
需要定期对 Elasticsearch、Mongodb 中存储的数据删除,同时还要将Mongodb中的表删除,否则磁盘空间容量不会减少。 | |||||
### 数据备份 | |||||
### 数据归档 |