Python+AI 打造每日新闻简报应用(聚合热搜 + 智能摘要 + 语音播报)
本教程将带你从零搭建一款 AI 驱动的每日新闻简报应用「Briefy」,核心功能包括聚合多平台热搜、AI 智能摘要、语音播报,最终实现 “5 分钟掌握全网热点” 的高效信息获取工具。适合有 Python 基础、对 AI 应用开发感兴趣的开发者,全程无需复杂底层开发,聚焦 “数据爬取 + AI 集成 + 功能落地” 全流程。
一、教程概述
本教程将带你从零搭建一款 AI 驱动的每日新闻简报应用「Briefy」,核心功能包括聚合多平台热搜、AI 智能摘要、语音播报,最终实现 “5 分钟掌握全网热点” 的高效信息获取工具。适合有 Python 基础、对 AI 应用开发感兴趣的开发者,全程无需复杂底层开发,聚焦 “数据爬取 + AI 集成 + 功能落地” 全流程。
二、核心技术栈与环境准备
- 技术栈选型
核心语言:Python 3.9+(稳定性适配各类依赖库)
数据爬取:Requests(接口请求)、BeautifulSoup4(网页解析)、Selenium(动态页面渲染,可选)
AI 智能摘要:大模型 API(推荐数眼智能 / 通义千问 / OpenAI API,支持中文优化)
语音播报:pyttsx3(离线语音)或百度语音合成 API(在线高质量语音)
数据存储(可选):SQLite(轻量本地存储)、Redis(热点数据缓存)
打包工具(可选):PyInstaller(生成桌面可执行文件) - 环境搭建步骤
安装 Python 环境:官网下载 Python 3.9+,勾选 “Add Python to PATH” 完成安装。
创建虚拟环境(推荐):
# 新建虚拟环境
python -m venv briefy-env
# 激活环境(Windows)
briefy-env\Scripts\activate
# 激活环境(Mac/Linux)
source briefy-env/bin/activate
- 安装依赖库:
pip install requests beautifulsoup4 pyttsx3 openai # 基础依赖
pip install selenium # 如需爬取动态页面(如部分热搜榜)
pip install pysqlite3 # 如需本地存储
pip install pyinstaller # 如需打包成桌面应用
三、分步实现核心功能
模块 1:多平台热搜数据爬取(核心数据源)
目标:爬取百度、今日头条、凤凰网、财联社等平台热搜,提取新闻标题、链接、发布时间。
- 爬取思路
优先使用平台公开 API(无反爬,效率高),无 API 则用网页解析。
为避免反爬,设置请求头(User-Agent)、控制爬取频率(time.sleep)。 - 代码实现(以百度热搜为例)
import requests
from bs4 import BeautifulSoup
import time
# 定义爬取函数
def crawl_baidu_hot():
hot_news = []
url = "https://top.baidu.com/board?tab=realtime" # 百度实时热搜榜
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
try:
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status() # 抛出请求异常
soup = BeautifulSoup(response.text, "html.parser")
# 解析热搜条目(根据网页结构调整选择器)
news_items = soup.select(".category-wrap_iQLoo a")
for item in news_items[:10]: # 取前10条热点
title = item.get("title") # 新闻标题
link = item.get("href") # 新闻链接
if title and link:
hot_news.append({
"platform": "百度",
"title": title,
"link": link,
"time": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
})
time.sleep(2) # 控制爬取频率
except Exception as e:
print(f"百度热搜爬取失败:{e}")
return hot_news
# 扩展:其他平台爬取(今日头条/凤凰网等)
def crawl_toutiao_hot():
# 类似逻辑,替换 url 和解析规则,可参考今日头条公开热搜接口
pass
# 聚合所有平台数据
def crawl_all_platforms():
all_news = []
all_news.extend(crawl_baidu_hot())
all_news.extend(crawl_toutiao_hot())
# 新增其他平台爬取函数...
return all_news
模块 2:AI 智能摘要(核心效率功能)
目标:调用大模型 API,将长新闻内容或多条热点压缩为简洁摘要(50 字以内)。
- 实现步骤
申请大模型 API 密钥(以通义千问为例,前往阿里云控制台申请)。
编写摘要函数,传入新闻标题 / 内容,返回 AI 生成的摘要。 - 代码实现
import openai # 若使用 OpenAI API;通义千问需安装 alibabacloud_tea_openapi
# 配置大模型(以通义千问为例,替换为自己的 API 信息)
def init_llm_client():
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_qwenlite20240118 import models as qwen_models
from alibabacloud_qwenlite20240118.client import Client as QwenLiteClient
config = open_api_models.Config(
access_key_id="你的AccessKeyId",
access_key_secret="你的AccessKeySecret",
endpoint="qwenlite.cn-hangzhou.aliyuncs.com"
)
return QwenLiteClient(config)
# AI 摘要生成函数
def generate_news_summary(news_title, llm_client):
prompt = f"请将以下新闻标题生成50字以内的简洁摘要,突出核心信息:{news_title}"
try:
request = qwen_models.ChatCompletionRequest(
model="qwen-turbo", # 轻量版模型,速度快、成本低
messages=[{"role": "user", "content": prompt}],
temperature=0.3 # 控制摘要准确性,越低越严谨
)
response = llm_client.chat_completion(request)
summary = response.body.output.choices[0].message.content
return summary
except Exception as e:
print(f"摘要生成失败:{e}")
return news_title # 失败时返回原标题
# 批量处理所有新闻摘要
def batch_generate_summaries(news_list, llm_client):
for news in news_list:
summary = generate_news_summary(news["title"], llm_client)
news["summary"] = summary
return news_list
模块 3:语音播报(场景化功能)
目标:将 AI 摘要转换为语音,支持离线播放(通勤场景适配)。
- 离线语音实现(pyttsx3)
import pyttsx3
# 初始化语音引擎
def init_voice_engine():
engine = pyttsx3.init()
# 配置语音参数(语速、音量、音色)
engine.setProperty('rate', 150) # 语速(默认200,150更易听)
engine.setProperty('volume', 1.0) # 音量(0.0-1.0)
# 选择音色(Windows需安装中文语音包)
voices = engine.getProperty('voices')
for voice in voices:
if "Chinese" in voice.name or "中文" in voice.name:
engine.setProperty('voice', voice.id)
break
return engine
# 语音播报摘要
def voice_broadcast(news_list, engine):
engine.say("欢迎收听今日新闻简报")
for i, news in enumerate(news_list[:5]): # 播报前5条热点
content = f"第{i+1}条,来自{news['platform']}:{news['summary']}"
print(content)
engine.say(content)
engine.say("新闻简报播放完毕,祝您生活愉快")
engine.runAndWait() # 执行播报
模块 4:整合与落地(完整流程串联)
将爬取、摘要、播报功能整合,实现 “一键生成简报”,可选本地存储功能。
def main():
# 1. 爬取多平台热搜
print("正在爬取全网热点...")
news_list = crawl_all_platforms()
if not news_list:
print("未获取到新闻数据,请检查网络或爬取规则")
return
# 2. 初始化大模型客户端,生成摘要
print("正在生成AI摘要...")
llm_client = init_llm_client()
news_list_with_summary = batch_generate_summaries(news_list, llm_client)
# 3. 初始化语音引擎,播报新闻
print("开始语音播报...")
voice_engine = init_voice_engine()
voice_broadcast(news_list_with_summary, voice_engine)
# 可选:本地存储新闻简报(SQLite)
# save_to_sqlite(news_list_with_summary)
print("今日新闻简报完成!")
if __name__ == "__main__":
main()
四、优化与扩展功能
- 基础优化
-
反爬增强:添加 IP 代理池(避免爬取频繁被封)、随机请求间隔。
-
摘要优化:调整 prompt 让摘要更聚焦 “事件 + 影响”,例如:“请生成 50 字内摘要,包含事件主体、核心动作、关键结果”。
-
语音优化:使用百度语音合成 API 替换 pyttsx3,支持情感语音、语速自定义(需申请 API 密钥)。
- 扩展功能
-
定时生成:用 schedule 库设置每日固定时间自动爬取 + 播报(适合挂机使用)。
-
分类筛选:增加 “科技”“财经”“娱乐” 等分类标签,支持用户自定义订阅。
-
桌面应用打包:用 PyInstaller 生成 .exe 文件(Windows),双击启动:
pyinstaller -F -w -i icon.ico main.py # -w 隐藏命令行窗口,-i 设置图标
- 多端同步:将简报存储到云盘(如阿里云 OSS),支持手机端查看。
五、常见问题排查
- 爬取失败:检查目标平台网页结构是否变更(需同步更新解析规则)、请求头是否完整、网络是否通畅。
- 摘要生成失败:确认 API 密钥是否有效、余额是否充足、网络是否能访问大模型服务器。
- 语音无声音:Windows 需安装中文语音包(控制面板→语音识别→文本到语音),Mac/Linux 需安装对应语言引擎。
- 运行卡顿:减少同时爬取的平台数量、使用轻量版大模型(如通义千问 turbo、GPT-3.5-turbo)。
六、最终效果演示
运行 main.py 后,程序将自动完成:
- 爬取百度、今日头条等平台热点(10-20 条)。
- 调用 AI 生成每条热点的 50 字内摘要。
- 语音播报前 5 条核心热点,通勤路上无需看屏即可掌握全网动态。
通过本教程,你不仅能获得一款实用的新闻简报工具,还能掌握 Python 爬虫、AI 大模型集成、语音合成等核心技能,可基于此拓展更多 AI 应用(如 AI 监控、智能报告生成等)私聊我可以获取数眼智能免费测试次数。
更多推荐



所有评论(0)