百万级财经热点挖掘实战:密度聚类算法+动态代理突破采集瓶颈


引言

如今新闻泛滥,令人眼花缭乱,即使同一话题下的新闻也多得数不胜数。人们可以根据自己的职业和爱好关注专业新闻网站的不同热点要闻。因此,通过对人们关注新闻的热点问题进行分析,可以得出民众对某个领域的关切程度和社会需要解决的问题,也有利于了解当前的舆论焦点,有助于了解民意,便于对舆论进行正确引导,使我们的社会更加安定和谐。

本文以财经领域为例,通过爬虫技术抓取网络上的大量财经新闻,通过对新闻内容文本进行预处理及密度聚类分析来发现热点;从发现的热点中,再进行词汇聚类分析,得出热点所涉及的人或事物,以此分析出社会对经济领域关注的问题和需要解决的问题。

1. 社会需求与挑战

随着互联网全部普及,网络新闻成为公众获取信息的主要途径。然而,新闻数量爆炸式增长导致以下问题:

  • 信息过载:用户难以快速识别核心热点。
  • 舆论引导风险:部分媒体通过标题误导公众,可能引发社会信任危机。
  • 政府监管困境:传统人工分析难以实时捕捉民意焦点。
2. 项目目标

通过文本挖掘技术实现:

  • 热点自动发现:从海量新闻中提取高关注度事件。
  • 民意深度分析:挖掘热点关联的行业、机构及公众关切点。
  • 决策支持:辅助政府精准把握舆论方向,优化政策引导。

二、项目实现框架

1. 整体流程

系统设计为:

  1. 数据采集动态代理多线程爬取新浪、搜狐、新闻。
  2. 数据清洗:去重、时间过滤、分词及特征提取。
  3. 热点挖掘:DBSCAN聚类识别热点簇,TextRank提取核心话题。

全部流程

2. 技术栈
  • 语言与工具:Python 3.6、jieba、scikit-learn、gensim、tkinter,亮数据代理

  • 核心算法:TF-IDF(特征提取)、DBSCAN(聚类)

  • 可视化系统:支持参数配置、聚类效果展示及交互式分析。
    可视化效果呈现


三、核心模块实现

1. 爬虫技术:高效获取多源新闻

爬取过程

  • 多线程并行抓取
    • 线程分配:独立线程处理新浪(6000条)、搜狐(1000条)。
    • 性能提升:较单线程效率提升3倍,总耗时控制在2小时内。
  • 混合解析策略
    • 动态页面解析:使用lxml提取正文内容(XPath定位)。
    • 反爬应对:随机请求头(User-Agent池)、IP代理轮换

进行爬虫之后,便可以利用 Python3 的 urllib 模块,通过使用urllib.request 的 Request 函数和 urlopen 函数分别请求和打开url中的内容,然后进行read操作并正确编码就可以获得json文件,通过json模块的解析,即可得到关于新闻的dict 字典。通过字典获取其中的title、time、url 的值,便可以得到新闻的标题、发布时间以及url,重要的呢是在爬虫过程中,我们使用了亮数据动态代理平台其中的动态住宅代理,进行ip轮换:

首先注册之后,我们进入主页
主页
选择动态住宅代理
住宅代理
进入之后,我们在代码示例中,就可以拿到python的代码示例
代码示例
将这部分代码,转化进项目当中:

关键代码逻辑

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import urllib.request
import json
from urllib.error import HTTPError, URLError
import socket

# 代理配置 - 替换为您的实际凭证
PROXY_USER = 'brd-customer-hl_c8247457-zone-residential_proxy1'
PROXY_PASS = 'c06sidmd55z5'
PROXY_HOST = 'brd.superproxy.io'
PROXY_PORT = 33335

# 配置代理处理器
proxy_handler = urllib.request.ProxyHandler({
    'http': f'http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}',
    'https': f'http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}'
})

# 创建支持代理的opener
opener = urllib.request.build_opener(proxy_handler)

# 定义目标API地址(示例)
news_api_url = "http://api.example.com/finance/news?page=1"

# 配置请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
    "Accept": "application/json"
}

try:
    # 创建请求对象
    req = urllib.request.Request(
        url=news_api_url,
        headers=headers
    )
    
    # 使用代理发送请求(设置10秒超时)
    with opener.open(req, timeout=10) as response:
        # 处理响应数据
        raw_data = response.read()
        decoded_data = raw_data.decode("utf-8")
        
        # 解析JSON数据
        news_dict = json.loads(decoded_data)
        
        # 提取结构化数据
        news_list = []
        for item in news_dict.get("data", {}).get("items", []):
            news_entry = {
                "title": item.get("title", ""),
                "time": item.get("publish_time", ""),
                "url": item.get("article_url", "")
            }
            news_list.append(news_entry)
            
        # 打印结果示例
        print("成功获取 {} 条新闻".format(len(news_list)))
        for idx, news in enumerate(news_list[:3], 1):
            print(f"{idx}. {news['title']} - {news['time']}")

except HTTPError as e:
    print(f"HTTP错误: {e.code} {e.reason}")
except URLError as e:
    print(f"网络连接失败: {e.reason}")
except socket.timeout:
    print("请求超时,请检查代理连接或尝试增加超时时间")
except json.JSONDecodeError as e:
    print(f"JSON解析失败: {str(e)}")
except KeyError as e:
    print(f"数据结构异常,缺少关键字段: {str(e)}")
except Exception as e:
    print(f"未知错误: {str(e)}")

效果为:

开始爬取
爬取完成,写入目录中
之后我们就可以拿到我们的一个使用情况,新人注册,亮数据平台会给大量免费额度,各位可以跳转感受一下
使用情况

效果

文件中含有4列数据,分别是title(新闻标题)、time(新闻发布时间)、url(新闻详细内容网址)以及 content(新闻容容)。

2. 数据预处理:从噪声到结构化特征
  • 数据清洗
    • 去重:MD5哈希比对标题与正文,剔除重复率>95%的新闻。
    • 时间过滤:限定2018年4月1-6日,聚焦近期热点。
    • 内容规范化:正则表达式移除编辑信息、保留中英文及数字。

具体流程:

预处理流程

  • 分词与特征工程
    • 领域词典增强:添加“CDR”“结构性去杠杆”等财经专有词。
    • 词性过滤:保留名词、动词、机构简称(如“美联储”“证监会”)。
    • TF-IDF向量化:生成8000×1500稀疏矩阵,筛选前5000维特征。

效果展示

处理效果对比

步骤原始数据清洗后数据
文本长度200-1500字80-800字
词汇量12万+3.5万(去停用词后)
3. 聚类分析:密度驱动的热点发现
  • DBSCAN参数调优
    • 扫描半径eps=0.43(余弦相似度阈值,实验得出最优值)。
    • 最小簇密度min_samples=10,过滤报道量<10的非热点事件。
  • 热点结果验证
    • 轮廓系数:0.62(>0.5表明簇结构清晰)。
    • 人工评估:随机抽样200篇,热点分类准确率89.3%。
      DBSCAN聚类过程
      最终效果:
      聚类以及效果展示

以上词类的聚类过程,主要为:

聚类过程


四、现成数据集 & 抓取工具开发套件

主页

数据集市场

基本使用

例如,使用亮数据的CNN新闻数据集访问有关CNN文章的结构化信息,包括标题,作者,主题,出版日期以及视频和图像等多媒体元素。流行的用例包括分析新闻趋势、跟踪内容传播以及研究新闻主题随时间的演变。
CNN
我们进入CNN news抓取器中
使用
选择抓取方式
新建之后呢,我们来到爬取器的主页
管理
分别有输入输出案例,API请求构建,输出词典以及日志等关键性内容,首先我们可以重点看下其中的网页抓取API

在创建的时候,可以添加一些设定的示例参数
构建
然后可以在平台当中构建我们的API

构建api
我们可以本地跑一下接口
请求发送
就可以在日志中看到正在爬取了

日志

不仅如此,对于零代码小白的爬虫需求人员带来了极大的方便,例如以下这个商业案例

CNN商业新闻数据库的商业分析价值

为“商业”类别量身定制的CNN新闻:

基于自然语言处理技术,标题与正文内容可精准量化公众对经济事件的情感倾向;时间戳字段能追踪新闻热度的生命周期演变,揭示商业事件的传播规律。

投资领域
▶ 量化新闻情感与股价波动的相关性(历史数据回溯准确率82%)
▶ 预警行业黑天鹅事件(如供应链危机报道早于市场反应3-6小时)

企业战略
▶ 监测竞品舆论声量及口碑变化(数据更新延迟<15分钟)
▶ 优化危机公关响应模型(缩短40%决策时间)

学术研究
▶ 验证商业新闻如何影响消费者信心指数
▶ 解构媒体议程设置对资本市场的影响路径

该数据集案例



评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序边界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值