写在前面
高校老师做社会调查、做舆情研究、做地方文化品牌传播分析,常常卡在第一步——数据从哪来。
问卷回收周期长、样本有限;商业数据平台动辄数万元且口径不透明;自己写爬虫,又被反爬、登录态、数据清洗这些"工程杂事"耗光精力,真正用于分析的时间所剩无几。
于是我们做了一件事:把"数据采集—清洗—标签化—占比统计"这条链路,封装成一个可以跑通的智能体。它最近完成了一次真实任务——采集微博上"带着微博去旅行 成都"话题下的博文,还原这座城市的传播受众画像。
本周六(7月25日)晚 19:00,我会在直播间拆解这个智能体的完整设计与踩坑过程。这篇文章是直播前的"导览"。
成都
一、从"翻微博"到"算微博":一次范式转变
传统的人文社科研究里,"看微博"是一种经验性观察——翻几百条、凭印象归纳"这个城市的网友似乎更关注非遗""那个地方的用户偏年轻"。
这种观察的问题在于:结论不可复现、样本不可审计、阈值不可追溯。你说"偏年轻",凭什么?你说"关注非遗",占比多少?换一个人来翻,结论可能完全不同。
智能体做的事,本质上是把这段"凭感觉"的过程变成一段"可审计的代码":
每一条入样的博文都有出处(博主ID、城市)
每一个标签的判定都有依据(相似度数值、阈值来源)
每一次占比统计都有口径(分母是谁、分子是谁)
这不是用AI替你思考,而是用代码把你的思考过程固化下来,接受同行检验。
二、三步还原一座城市的用户群像
这个智能体分两个阶段,对应科研里"数据采集"与"数据分析"两个环节。
都江堰 青城山
阶段一:采集与清洗
输入一个搜索词(本例是"带着微博去旅行 成都"),智能体驱动反检测浏览器,自动登录、翻页、抓取。
这里有几个容易被忽略的工程细节:
1. 为什么不直接用 requests? 微博搜索结果页是动态加载,且对非登录态限制严格。我们用 CloakBrowser(反检测浏览器)+ Selenium,复用浏览器登录态,绕过自动化检测。这同时也是一个伦理边界——它保证了我们以"正常用户视角"访问,不做高频并发轰炸。每条博文之间有2~4秒随机延时,这是对平台的尊重,也是对数据稳定性的保障。
2. 为什么要调 longtext 接口? 搜索页的正文是截断的,常常只显示前30字。如果用截断文本做语义分析,结论会严重失真。智能体优先调用微博的 longtext 接口取完整正文,再回退到"点击展开"读全文节点。这次成都的采集中,有相当比例博文的完整正文是靠 longtext 接口拿到的——如果跳过这一步,后续标签分类会大面积误判。
3. 为什么清洗规则要写这么细? 这是整个项目最花时间的地方。原始文本里有话题标记#带着微博去旅行#、超话标识、@用户、短链、表情符号、Unicode emoji,甚至还有"展开c""这类按钮文字和位置签名的残留。
每多一种残留,分类器就被多一分噪声干扰。我们的清洗规则最终覆盖了:话题、超话、URL、@用户、方括号表情、Unicode emoji、特殊符号、搜索关键词、城市名(含"成都"的简称兜底)、展开/收起按钮文字、末尾位置签名。
对科研而言,清洗规则就是"数据质量声明"。 一篇论文如果只说"我们清洗了数据"而不列出清洗规则,相当于方法不可复现。
阶段二:标签分类与占比
这里用的是 shibing624/text2vec-base-chinese 这个中文语义模型。做法是:
把"标签名称+特征词"拼接成标签描述句,编码成向量
博文整句编码成向量
计算余弦相似度
相似度 ≥ 阈值的标签,即为此博主的有效标签
最终输出每个博主的标签集合,以及按城市统计的标签占比。成都这次跑出来的真实数据里,"生态旅游""摄影记录"等标签的占比,与我们对一个成都的常识判断高度吻合——这是对方法有效性的一个侧面验证。
九寨沟
微信号丨15911943906
公司官网wwwjiecl.com

