基于 Playwright 的知乎评论采集器:关键词搜索 + 可视化 GUI + 批量导出

在这里插入图片描述

一、前言

做舆情分析、内容运营或者写研究报告时,经常需要批量获取知乎评论数据。手动复制不现实,自己写爬虫又容易被反爬、登录态过期等问题劝退。

这篇文章分享一个我近期完成的工具:知乎评论采集器 v2.0。它基于 Python + Playwright 实现浏览器自动化,提供可视化 GUI,支持关键词搜索和链接批量采集,导出格式覆盖 CSV / JSON / Excel。

文章最后会放出完整可执行文件和源码思路,方便学习交流。

二、工具能做什么

功能 说明
关键词搜索采集 输入关键词,自动搜索知乎相关内容并采集评论
链接批量采集 支持单个或多个知乎链接,批量抓取评论
可视化界面 基于 Tkinter,无需命令行,双击即用
多种导出格式 CSV、JSON、Excel 三种格式可选
登录态持久化 首次登录后保存 Cookie,后续无需重复登录
实时数量显示 采集过程中实时显示已采集评论数

适用场景:

  • 舆情监测与情感分析
  • 竞品调研与用户反馈收集
  • 内容选题与热点挖掘
  • 学术语料收集

三、技术方案

3.1 为什么不直接用 requests

知乎的反爬机制比较成熟,直接发 HTTP 请求很容易触发验证码或 IP 限制。用 Playwright 控制真实浏览器,有几个好处:

  1. 自动处理登录态和 Cookie
  2. 能执行页面内的 JavaScript,调用知乎内部 API
  3. 行为更接近真实用户,被封概率低
  4. 可以绕过部分 CORS 限制

3.2 核心流程

启动浏览器 → 访问知乎首页 → 检测登录状态
    ↓
关键词搜索(调用 /api/v4/search_v3)
    ↓
解析搜索结果 → 提取回答/文章 ID
    ↓
调用评论 API(/api/v4/{type}/{id}/comments)
    ↓
清洗数据 → 去重 → 保存 CSV/JSON/Excel

3.3 关键 API

搜索接口:

https://www.zhihu.com/api/v4/search_v3?t=general&q={keyword}&offset=0&limit=10

评论接口:

https://www.zhihu.com/api/v4/answers/{id}/comments?order_by=score&limit=20&offset=0
https://www.zhihu.com/api/v4/articles/{id}/comments?order_by=score&limit=20&offset=0

这些接口需要登录 Cookie,因此通过 Playwright 在浏览器上下文内调用 fetch,可以自动携带当前会话。

3.4 数据处理

知乎评论 API 返回的数据结构需要注意,评论作者信息位于 author.member 中,而不是直接挂在 author 上:

{
  "id": 123456,
  "content": "<p>评论内容</p>",
  "author": {
    "role": "member",
    "member": {
      "name": "用户名",
      "id": "user_id",
      "avatar_url": "..."
    }
  },
  "vote_count": 10,
  "created_time": 1700000000,
  "address_text": "北京"
}

提取时需要做一次字段映射:

function extractAuthor(authorObj) {
  const m = (authorObj || {}).member || {};
  return {
    name: m.name || '',
    id: String(m.id || ''),
    avatar: (m.avatar_url || '').replace('_s', '_r')
  };
}

四、代码结构

项目主要文件:

zhihu_comment_scraper/
├── engine.py          # 采集引擎
├── gui.py             # Tkinter 界面
├── run.py             # 命令行入口
├── build.py           # PyInstaller 打包脚本
└── release/
    ├── 知乎评论采集器.exe
    └── 使用说明.txt

4.1 采集引擎核心

engine.py 负责浏览器启动、登录检测、搜索、评论抓取和数据保存。核心类为 ZhihuCommentEngine

搜索函数伪代码:

async def _search_keyword(self, keyword: str, max_results: int = 10) -> list:
    # 在浏览器内调用知乎搜索 API
    result = await self._page.evaluate("""async () => {
        const resp = await fetch('/api/v4/search_v3?t=general&q=' + keyword);
        return await resp.json();
    }""")
    # 解析搜索结果,提取 title / content_type / content_id / url
    return items

评论抓取函数伪代码:

async def _fetch_comments_for_content(self, content_type, content_id, ...):
    while self._running:
        result = await self._page.evaluate("""async () => {
            const resp = await fetch(`/api/v4/${type}/${id}/comments?...`);
            return await resp.json();
        }""")
        # 解析评论,分页处理

4.2 GUI 界面

gui.py 使用 Tkinter 构建主界面,分为两个标签页:

  • 关键词搜索
  • 链接采集

采集过程放在独立线程中运行,避免阻塞界面。

五、踩坑记录

5.1 跨域问题

知乎文章域名是 zhuanlan.zhihu.com,而评论 API 在 www.zhihu.com 下。如果直接跳转到文章页面再调用评论接口,会触发跨域限制。

解决办法:保持页面在 www.zhihu.com 域下,通过浏览器 fetch 直接调用评论 API,无需进入每篇文章页面。

5.2 字段结构变化

知乎评论 API 的 author 字段并不直接包含用户名,而是嵌套在 author.member 中。最初按常规结构解析,导致所有评论都因为"用户名为空"被过滤。

解决办法:封装 extractAuthor() 函数,兼容 author.member.name 的嵌套结构。

5.3 登录态检测

首次打开知乎首页时,未登录用户会被重定向到登录页。工具需要等待用户完成登录后再继续。

解决办法:检测当前 URL 是否包含 signinlogin,循环等待最多 300 秒,用户点停止则立即中断。

六、使用说明

  1. 下载解压后,双击 知乎评论采集器.exe
  2. 首次运行会打开 Chromium 浏览器,登录知乎账号
  3. 回到软件界面,输入关键词或粘贴知乎链接
  4. 设置采集参数,点击「开始采集」
  5. 采集完成后,选择导出格式保存

七、总结

这个工具把知乎评论采集的完整流程做成了一个开箱即用的桌面软件。相比传统爬虫,它通过浏览器自动化降低了被封风险;相比手动复制,它大幅提升了效率。

如果你也在做舆情分析、内容运营或数据收集相关的工作,可以下载试试。

八、下载地址

  • 工具下载:见 CSDN 下载资源页面
  • 运行环境:Windows 10 / Windows 11

声明:本工具仅供学习交流和技术研究使用,请遵守知乎平台规则及相关法律法规,合理使用。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐