文章目录
引言
如今新闻泛滥,令人眼花缭乱,即使同一话题下的新闻也多得数不胜数。人们可以根据自己的职业和爱好关注专业新闻网站的不同热点要闻。因此,通过对人们关注新闻的热点问题进行分析,可以得出民众对某个领域的关切程度和社会需要解决的问题,也有利于了解当前的舆论焦点,有助于了解民意,便于对舆论进行正确引导,使我们的社会更加安定和谐。
本文以财经领域为例,通过爬虫技术抓取网络上的大量财经新闻,通过对新闻内容文本进行预处理及密度聚类分析来发现热点;从发现的热点中,再进行词汇聚类分析,得出热点所涉及的人或事物,以此分析出社会对经济领域关注的问题和需要解决的问题。
1. 社会需求与挑战
随着互联网全部普及,网络新闻成为公众获取信息的主要途径。然而,新闻数量爆炸式增长导致以下问题:
- 信息过载:用户难以快速识别核心热点。
- 舆论引导风险:部分媒体通过标题误导公众,可能引发社会信任危机。
- 政府监管困境:传统人工分析难以实时捕捉民意焦点。
2. 项目目标
通过文本挖掘技术实现:
- 热点自动发现:从海量新闻中提取高关注度事件。
- 民意深度分析:挖掘热点关联的行业、机构及公众关切点。
- 决策支持:辅助政府精准把握舆论方向,优化政策引导。
二、项目实现框架
1. 整体流程
系统设计为:
- 数据采集:动态代理多线程爬取新浪、搜狐、新闻。
- 数据清洗:去重、时间过滤、分词及特征提取。
- 热点挖掘: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%。
最终效果:
以上词类的聚类过程,主要为:
四、现成数据集 & 抓取工具开发套件
基本使用
例如,使用亮数据的CNN新闻数据集访问有关CNN文章的结构化信息,包括标题,作者,主题,出版日期以及视频和图像等多媒体元素。流行的用例包括分析新闻趋势、跟踪内容传播以及研究新闻主题随时间的演变。
我们进入CNN news抓取器中
新建之后呢,我们来到爬取器的主页
分别有输入输出案例,API请求构建,输出词典以及日志等关键性内容,首先我们可以重点看下其中的网页抓取API。
在创建的时候,可以添加一些设定的示例参数
然后可以在平台当中构建我们的API
我们可以本地跑一下接口
就可以在日志中看到正在爬取了
不仅如此,对于零代码小白的爬虫需求人员带来了极大的方便,例如以下这个商业案例
CNN商业新闻数据库的商业分析价值
为“商业”类别量身定制的CNN新闻:
基于自然语言处理技术,标题与正文内容可精准量化公众对经济事件的情感倾向;时间戳字段能追踪新闻热度的生命周期演变,揭示商业事件的传播规律。
投资领域
▶ 量化新闻情感与股价波动的相关性(历史数据回溯准确率82%)
▶ 预警行业黑天鹅事件(如供应链危机报道早于市场反应3-6小时)企业战略
▶ 监测竞品舆论声量及口碑变化(数据更新延迟<15分钟)
▶ 优化危机公关响应模型(缩短40%决策时间)学术研究
▶ 验证商业新闻如何影响消费者信心指数
▶ 解构媒体议程设置对资本市场的影响路径