从0到1构建AI智能体:基于Playwright与DeepSeek的舆情自动化监测系统实战
传统爬虫只抓数据,AI Agent 创造价值。本文记录了一名新闻系研究生,如何利用 Python Playwright 攻克动态网页(SPA)的状态丢失难题,并接入 DeepSeek 大模型实现舆情语义清洗,最终构建出一套能够自动运行、自动筛选、自动报警的舆情监测系统。附完整核心代码与设计思路。
前言:为什么一个新闻系研究生要写代码?
我是东北师范大学新闻传播专业的一名研一学生。在我们课题组的日常研究中,捕捉“社会痛点”和“负面舆情”是必备内容
但现实很骨感:面对海量的信息流,人工筛选就像在大海捞针。传统爬虫只能抓标题,关键词匹配(Regex)又太笨,经常把“好日子”误判为负面新闻,或者漏掉那些阴阳怪气的“高级黑”。
为了解决这个痛点,我利用 Python 和最新的 LLM(大语言模型)技术,给自己开发了一个“全自动舆情监测智能体(AI Agent)”。它能每天自动醒来,帮我搜遍人民日报、澎湃新闻、光明网,把真正值得关注的社会争议新闻发到我的邮箱里。
今天分享一下这个项目的核心技术难点和我的解决方案。
一、 项目架构:不仅仅是爬虫
这个项目不仅仅是一个脚本,它符合 AI Agent(智能体) 的感知、决策、执行三要素:
-
感知层(Eyes): 使用
Async Playwright进行异步网页采集,专门对抗动态渲染。 -
决策层(Brain): 接入
DeepSeek大模型 API,用语义理解替代关键词匹配,精准识别“社会舆情”。 -
执行层(Hands): 结合 macOS Automator 和 SMTP 协议,实现无感运行和邮件推送。
二、 技术挑战 1:SPA 页面的“状态丢失”难题
这是我在开发中最头疼的问题。以某主流新闻客户端(WAP版)为例,它是一个典型的 SPA(单页应用)。
问题复现: 我想获取新闻的真实链接,必须“点击”标题进入详情页,拿到 URL 后再“后退”回列表。 但是,每次执行 page.go_back() 后,页面 DOM 树会重置!之前我辛苦点击“加载更多”刷出来的 40 条新闻,瞬间变回了初始的 10 条。脚本直接傻眼,找不到第 11 条新闻,程序崩溃。
解决方案:自动状态恢复逻辑 我参考了前端状态管理的思路,在 Python 里写了一套“死磕复活”机制:
Python
# 核心逻辑伪代码
for i in range(target_count):
# 每次操作前,先检查页面上的新闻数量够不够
current_items = page.locator(selector)
if await current_items.count() <= i:
print(f"⚠️ 检测到页面重置 (当前{current_items.count()}条 < 目标{i+1})")
# 触发状态恢复:疯狂点击加载,直到列表长度恢复
while await current_items.count() <= i:
await load_more_btn.click()
await page.wait_for_timeout(1000)
# 状态恢复后,继续点击下一条...
这段逻辑让我的 Agent 具备了极强的鲁棒性,无论页面怎么刷新,它都能“顽强”地恢复到之前的工作状态。
三、 技术挑战 2:如何让 AI 读懂“舆情”?
把几万字的新闻扔给 AI 既费钱又慢。我设计了一套 “硬过滤 + 软筛选” 的漏斗机制:
-
Python 硬过滤: 在代码层面维护一个
BLACKLIST(黑名单),直接过滤掉包含“会议”、“致辞”、“正能量”等明显非舆情类的新闻。这帮我节省了 80% 的 Token 成本。 -
DeepSeek 语义分析: 将清洗后的数据喂给 DeepSeek,配合精心设计的 Prompt(提示词):
“你是一名社会舆情分析师。请过滤掉所有成就展示和领导动态,重点保留恶性治安事件、食品安全、烂尾楼、就业困难及网友争议话题...”
结果惊人:DeepSeek 能精准识别出像“磷脂0含量骗局”这种不仅没有敏感词,但极具社会争议的新闻。
四、 自动化部署:让 Mac 成为服务器
为了让它每天自动运行,我没有买云服务器,而是榨干了我的 MacBook Air (M1)。
我遇到了 macOS “App Nap(应用小憩)” 的坑:不插电或后台运行时,系统会杀掉 Python 进程。 最终我通过编写 Shell 启动脚本 (start_bot.sh) 并结合 Automator 的日历触发器,成功实现了“静默运行”。现在,每天下午 4 点,它都会准时通过 Mac 通知中心向我汇报工作。

五、 总结与反思
作为一名文科生,编程带给我的不仅仅是效率,更是一种“工程化思维”。如果你也对“计算传播”或“Python 自动化”感兴趣,欢迎在评论区交流!
更多推荐



所有评论(0)