# 东方财富和科创版日报的实时内容爬取和主题聚类分析 **Repository Path**: yonglehou/gitDFCF_KECRBScrapyItem ## Basic Information - **Project Name**: 东方财富和科创版日报的实时内容爬取和主题聚类分析 - **Description**: 针对东方财富(特定版面)和科创版日报的爬虫,主要运用的是selenium和request库;聚类的模型可以自己输入数据训练,也可以直接用提供的模型, - **Primary Language**: Python - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-04-24 - **Last Updated**: 2024-04-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 东方财富和科创版日报的实时内容爬取和主题聚类分析 # 基于财经新闻的主题聚类分析 ## 1.文章背景介绍: ​ 本文是我自己毕业设计的开头部分内容的一个修改版,整个毕业设计的目的是设计一个基于财经新闻的实时热门话题生成系统,类似于微博热搜这样一个可以提供实时热度的系统;论文行文结构为爬虫阶段 --> 数据清洗阶段 --> 模型训练和聚类阶段 --> 数据传输 --> 实时流式数据处理和分析 --> 网页设计展示,这篇文章就是爬虫阶段 --> 数据清洗阶段 --> 模型训练和聚类阶段等前三个阶段的一个简单展示版; ​ 这篇文章的主要目的是构建一个窗口时限爬虫,即实现一个模拟固定窗口时间的爬虫机制,从而获得一段时间内的实时新闻数据(滚动窗口,后续设计中的滑窗设计和流式处理代码不再由Python完成,所以这里不做过多描述) ## 2.文章结构分析: ​ 本文主要分为爬虫阶段 --> 数据清洗阶段 --> 模型训练和聚类阶段,在后续的内容中,会针对每个阶段做单独的讲解分析:所谓窗口时限爬虫机制,就是指让爬虫持续不断的运行,并在经过一个大致相等的事件后,对输出做一次整体输出,这里是对新闻数据做滚动窗口输出,默认时限是1小时;由于本文只爬取了东方财富和科创版日报两个网站的内容,所以新闻内容较少,所以模型训练由提前收集到的数据完成,这里只对后续的新闻做一个主题归纳; ## 3.爬虫阶段: ​ 这里是对东方财富和科创版日报两个网站做新闻内容爬取,后续可以添加更多的网站,并可以做多线程优化;以下对两个网站做一个分析,来帮助判断如何编写爬虫程序: ### 3.1东方财富网页分析: 地址为:https://kuaixun.eastmoney.com/; 由于这个页面新闻的url变化无规律可行,且可以自动更新,所以我采用selenium的方式爬取内容,通过网页观察,这些新闻最短也是1-2分钟刷新一次,所以我将爬虫程序的休眠时间设置在60秒,也即每60秒,整个爬虫程序会运行一次(两个网页),算上整体的运行时间(大致为30秒,因为科创版日报有访问限制,所以也做了休眠处理),大致为90秒一次;爬到内容后,对数据进行一个预处理,获取到title、time和content三部分内容,其中正文部分是用来做后续篇章主题分析的,本文不做讲述,time是后续输入到Flink框架中作为EventTime事件时间戳使用的,这里也不做讲述,title是本文用来做LDA主题模型的训练和后续聚类分析的,是本文的重点分析对象; ### 3.2科创版日报网页分析: 地址为:https://www.chinastarmarket.cn/telegraph 科创版日报的这一网页采用的是滚动刷新的方式进行,观察url,发现url最后6位数字虽然不是以1为步长进行更新,但是每两条新闻之间的步长基本不会超过5,所以想到采用requests和beautifulSoup模块来编写爬虫程序;为保险起见,我将每次运行的步长扩展到20,分20次运行,即每次增加1,由于网站新闻更新的速度较慢,所以基本不会出现短时间内出现20以上的步长增长(每次爬虫运行周期90秒,也即90秒内爬取20次网站内容来搜索新闻),当搜索到新闻后,更新url的后6位数字,保存好后做后续的爬取,后续爬取过程与之前完全一致; ### 3.3爬虫整体设计: ​ 设置窗口次数为40,即爬虫运行40次后,会对数据做一次整体输出,也即1个小时对两个网站的数据做一个合并输出,这一个小时也就是我们的滚动窗口时限,这里由于没有后续的实时处理部分,所以这里不对数据做IO,只是将数据进行保存,然后重新读取处理分析,展示分析结果;