cnki-advanced-search
知网高级检索论文工具
调用 Python Playwright 脚本(scripts/cnki_search.py)执行全流程自动化检索,无需 MCP 工具操作浏览器。
Step 0: 解析用户输入并制定检索策略(倒剥洋葱法)
0.1 识别输入类型
类型一:单关键词(用户给出一个词或概念)
→ 将该词及其同义词、同位词用 + 连接,填入单个检索框。
例:用户说"情感劳动"→ 情感劳动 + 情绪劳动 + 情感工作
类型二:研究选题 / 研究问题(用户给出包含多个概念的完整表述)
→ 从选题中提取 2-4 个核心概念,每个概念分别扩展同义词/同位词,各自作为一个检索组,组间关系为 AND(联合检索)。
例:用户说"超大城市老旧社区数字治理的悬浮与重建"→ 提取三组核心概念:
- 第一组(场所):
老旧社区 + 老旧小区 + 城市社区 - 第二组(议题):
数字治理 + 数字化治理 + 数字技术治理 - 第三组(机制):
技术悬浮 + 数字悬浮 + 技术失灵
三组形成 AND 联合检索,聚焦"老旧社区 × 数字治理 × 悬浮机制"的交叉文献。
注意:不要把一个选题的几个概念各自独立检索再合并,那会检出大量不相关文献。AND联合检索才能聚焦核心文献。
0.2 上位概念预分析(关键步骤)
填词之前,对每个概念组完成以下判断:
判断该组词是否"过于精确/小众":
- 新兴理论术语(如"技术悬浮""制度悬置")
- 极具体的场所或现象描述(如"老旧社区""城中村")
- 近几年才出现的政策/实践概念(如"数字乡村""反向育儿")
如果某组词落入上述类别,立即在该组内加入上位概念(用 + OR关系),不要等到检索失败后才扩展。
| 概念类型 | 精确词 | 主动纳入的上位概念/兜底词 |
|---|---|---|
| 新兴理论术语 | 技术悬浮 + 数字悬浮 | 技术失灵 + 数字鸿沟 + 基层数字化 |
| 具体场所 | 老旧社区 + 老旧小区 | 城市社区 + 社区治理 |
| 新政策概念 | 数字乡村 | 农村数字化 + 乡村振兴 + 农村信息化 |
| 具体机制 | 制度悬置 | 制度失效 + 制度执行 + 基层治理 |
规则:宁可初始词组稍宽,也不要等检索为0后才想起扩展。上位概念应在设计时就一并纳入同一组的
+OR列表中。
0.3 倒剥洋葱策略(结果不足时自动降级)
先用全部概念组 AND 检索(最聚焦层)。若检索结果过少(< 20篇),自动减少 AND 组数,最少保留 2 组 AND,不自动降至 1 组:
| 层级 | 策略 | 适用场景 |
|---|---|---|
| 第1层(最聚焦) | 所有概念组 AND | 交叉研究、新兴议题 |
| 第2层 | 去掉最次要的一组,保留核心 N-1 组 AND | 第1层结果 < 20篇 |
| 第3层(底线) | 保留最核心的 2 组 AND | 第2层结果仍 < 20篇 |
去组顺序原则:先去掉与研究问题关系最外围的概念组(如修饰性概念、情境概念),最后保留最核心的理论/机制概念组。
0.4 向用户确认
列出拟定的检索分组和当前层级策略,等用户确认后再执行。格式示例:
检索策略:第1层(3组 AND 联合检索)
- 组1(场所):老旧社区 + 老旧小区 + 城市社区 + 社区治理
- 组2(议题):数字治理 + 数字化治理 + 数字技术治理
- 组3(机制):技术悬浮 + 数字悬浮 + 技术失灵 + 基层数字化
若结果 < 20篇,将自动降至第2层(去掉组3,保留组1 AND 组2)
若仍 < 20篇,保留2组AND并停止降级,提示调整关键词
0.5 结果反思触发条件
脚本报告以下情况时,必须停下来重新思考关键词,不能直接导出:
| 情况 | 诊断方向 |
|---|---|
| 2组AND结果为0 | 两组词都太专 → 各自替换为更高层的上位概念 |
| 2组AND结果 < 5篇 | 某组词太冷僻 → 找出哪组更窄,优先替换该组 |
| 2组AND结果 5-19篇 | 边界情况 → 尝试在某一组补充1-2个上位概念后重检索 |
底线原则:宁可修改关键词重跑,也不接受"2组AND < 20篇"的结果直接导出。1组AND的结果范围太宽,不具备文献聚焦价值。
Step 0.5: 检查 Chrome 调试模式
在执行前,检查 Chrome 是否已以调试模式运行(脚本会自动尝试连接):
curl -s http://localhost:9222/json/version 2>&1
- 若返回 JSON(含
"Browser": "Chrome/..."):Chrome 已就绪,直接进入 Step 1。 - 若返回错误/空:执行以下命令启动 Chrome,等待 2 秒后再检查:
open -a "Google Chrome" --args --remote-debugging-port=9222
sleep 2
curl -s http://localhost:9222/json/version 2>&1
若仍无响应,提示用户手动启动 Chrome 调试模式后继续。
注意:连接现有 Chrome 可保留已登录的知网会话,跳过登录步骤。
Step 1: 调用 Python 脚本执行检索(倒剥洋葱执行)
从第1层开始检索,根据结果数量决定是否降级。
第1层(全组 AND):
python3 /Users/songyiping/.claude/skills/cnki-advanced-search/scripts/cnki_search.py \
--keywords "老旧社区 + 老旧小区 + 城市社区" \
--keywords "数字治理 + 数字化治理 + 数字技术治理" \
--keywords "技术悬浮 + 数字悬浮 + 技术失灵" \
--max-results 100 \
--port 9222
若结果 < 20篇 → 降至第2层(去最次要组):
python3 /Users/songyiping/.claude/skills/cnki-advanced-search/scripts/cnki_search.py \
--keywords "老旧社区 + 老旧小区 + 城市社区" \
--keywords "数字治理 + 数字化治理 + 数字技术治理" \
--max-results 100 \
--port 9222
若仍 < 20篇 → 降至第3层(单组):
python3 /Users/songyiping/.claude/skills/cnki-advanced-search/scripts/cnki_search.py \
--keywords "数字治理 + 数字化治理 + 社区数字化" \
--max-results 100 \
--port 9222
每次降级前向用户说明:"第N层结果为 X 篇,不足20篇,自动降至第N+1层检索。"
脚本会自动处理:
- 连接现有 Chrome(CDP 端口 9222)或启动新的 Chromium
- 导航到知网高级检索页面
- 验证码检测(出现时暂停,等用户在终端按 Enter 确认完成)
- 登录检查(未登录时暂停等用户登录)
- 选择学术期刊、勾选 CSSCI、填入关键词
- 执行检索、按被引量降序排列、每页50条
- 逐页全选并导出,最多100篇
- 解析数据、保存为 Excel
脚本输出示例:
===== 知网高级检索自动化工具 =====
关键词分组: ['老旧社区 + 老旧小区', '数字治理 + 数字化治理', '技术悬浮 + 数字悬浮']
最大结果数: 100
...
[✓] 检索完成!共提取 87 篇论文
[✓] 文件已保存:/Users/songyiping/Downloads/知网检索_老旧社区_20260406_1523.xlsx
Step 2: 独立补充检索(间接相关文献)——必做步骤
主体联合检索完成后,必须执行独立补充检索,目的是获取"不直接在交叉处、但对选题有理论支撑和背景价值"的间接相关文献。
2.1 补充检索设计原则
从 Step 0 已提取的概念组中,各自独立拆出 2-3 个补充检索:
| 补充检索类型 | 来源概念 | 目的 |
|---|---|---|
| 研究对象背景文献 | 取"研究对象组"单独检索(放宽限定词) | 获取该群体的历史脉络、政策背景、宏观描述性文献 |
| 核心理论文献 | 取"理论/机制概念组"单独检索 | 获取支撑该议题的理论基础文献,不限研究对象 |
| 扩展议题文献(可选) | 取选题中的次要概念或上位主题 | 覆盖选题边界的跨界文献 |
重要:每个补充检索使用 2 组 AND(不做单组宽泛检索),仍需保持一定聚焦度。补充检索的目的是"换一个切面",不是"无限扩宽"。
2.2 向用户展示补充检索方案
在 Step 0.4 的策略确认中,同步列出补充检索方案,例如:
【主体联合检索】第1层(2组 AND)
- 组1(对象):网约车司机 + 快车司机 + 平台司机
- 组2(议题):平台劳动 + 零工经济 + 意义建构 + 身份认同
【独立补充检索】(主体检索完成后必做)
- 补充检索A(研究对象背景):出租车 + 网约车 × 职业认同 + 身份认同 + 劳动体验
- 补充检索B(核心理论):平台劳动 + 零工经济 + 算法管理 × 主体性 + 劳动控制 + 抵抗
2.3 执行补充检索
每个补充检索同样使用 cnki_search.py,结果保存到独立 Excel 文件:
# 补充检索A:研究对象背景文献
python3 /Users/songyiping/.claude/skills/cnki-advanced-search/scripts/cnki_search.py \
--keywords "出租车 + 网约车 + 出租车司机 + 网约车司机" \
--keywords "职业认同 + 身份认同 + 劳动体验 + 生计" \
--max-results 60 \
--port 9222
# 补充检索B:核心理论文献
python3 /Users/songyiping/.claude/skills/cnki-advanced-search/scripts/cnki_search.py \
--keywords "平台劳动 + 零工经济 + 平台工人 + 数字劳动 + 算法管理" \
--keywords "主体性 + 劳动控制 + 抵抗 + 意义建构 + 身份认同" \
--max-results 80 \
--port 9222
补充检索结果不足20篇时不强制降级(因为间接相关文献本就预期数量较少),但若结果为0,需替换上位概念重试。
Step 3: 汇总合并——输出统一分类 Excel
所有检索(主体 + 补充)完成后,必须用 Python 脚本将全部结果合并去重,生成一个统一的分类 Excel。
3.1 合并脚本模板
import openpyxl
from openpyxl.styles import Font, PatternFill, Alignment
from collections import Counter
# 1. 定义各批次文件及其类别标签
files = {
"直接相关([主体对象]×[核心议题])": "/Users/songyiping/Downloads/知网检索_XXX.xlsx",
"间接相关-[背景类型]([对象]×[议题])": "/Users/songyiping/Downloads/知网检索_YYY.xlsx",
"间接相关-[理论类型]([理论]×[机制])": "/Users/songyiping/Downloads/知网检索_ZZZ.xlsx",
}
# 2. 读取、去重(按"标题"列)
all_rows = []
seen_titles = set()
title_idx = 1 # Excel列: 序号(0), 标题(1), 作者(2), 来源期刊(3), 发表时间(4), 摘要(5)
for category, filepath in files.items():
wb = openpyxl.load_workbook(filepath)
ws = wb.active
rows = list(ws.iter_rows(values_only=True))
for row in rows[1:]:
title = str(row[title_idx]).strip() if row[title_idx] else ""
if title and title not in seen_titles:
seen_titles.add(title)
all_rows.append((category,) + tuple(row[1:])) # 去掉原序号,前置类别
# 3. 写入汇总 Excel
wb_out = openpyxl.Workbook()
ws_out = wb_out.active
ws_out.title = "文献汇总"
headers = ["序号", "文献类别", "标题", "作者", "来源期刊", "发表时间", "摘要"]
ws_out.append(headers)
# 表头样式
for cell in ws_out[1]:
cell.font = Font(bold=True, color="FFFFFF", size=11)
cell.fill = PatternFill(fill_type="solid", fgColor="2F5496")
cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
# 各类别颜色(按类别数量自动分配,以下为示例3类)
category_colors = {
list(files.keys())[0]: "D9E1F2", # 蓝:直接相关
list(files.keys())[1]: "E2EFDA", # 绿:间接相关A
list(files.keys())[2]: "FFF2CC", # 黄:间接相关B
}
for seq, row_data in enumerate(all_rows, 1):
category = row_data[0]
ws_out.append((seq,) + row_data)
fill_color = category_colors.get(category, "FFFFFF")
for cell in ws_out[ws_out.max_row]:
cell.fill = PatternFill(fill_type="solid", fgColor=fill_color)
cell.alignment = Alignment(vertical="top", wrap_text=True)
# 列宽
for i, width in enumerate([4, 30, 20, 16, 12, 60], 1):
ws_out.column_dimensions[openpyxl.utils.get_column_letter(i)].width = width
ws_out.column_dimensions["B"].width = 30 # 类别列
# 行高
for row in ws_out.iter_rows(min_row=2):
ws_out.row_dimensions[row[0].row].height = 60
ws_out.freeze_panes = "A2"
# 分类统计 sheet
ws_summary = wb_out.create_sheet("分类统计")
ws_summary.append(["文献类别", "篇数"])
for cat, cnt in Counter(r[0] for r in all_rows).items():
ws_summary.append([cat, cnt])
ws_summary.append(["合计", len(all_rows)])
for cell in ws_summary[1]:
cell.font = Font(bold=True)
output_path = f"/Users/songyiping/Downloads/知网文献汇总_{研究主题}_{日期}.xlsx"
wb_out.save(output_path)
print(f"[✓] 已保存: {output_path} (共{len(all_rows)}篇,去重后)")
3.2 颜色约定
| 类别 | 颜色 | 含义 |
|---|---|---|
| 直接相关 | 蓝色 D9E1F2 |
主体联合检索命中,聚焦选题核心 |
| 间接相关-背景 | 绿色 E2EFDA |
研究对象/情境的历史背景文献 |
| 间接相关-理论 | 黄色 FFF2CC |
理论/机制的基础支撑文献 |
| 间接相关-扩展 | 橙色 FCE4D6 |
其他扩展视角文献(如有第4类) |
Step 4: 报告结果
输出检索完成报告,告知用户:
- 各轮检索层级与篇数
- 去重后总篇数
- 各类别分布(直接/间接)
- 汇总文件路径
打开文件:
open "/Users/songyiping/Downloads/知网文献汇总_*.xlsx"
如需更多 AI 智能体学习资料和技巧,欢迎关注:
常见问题处理
| 问题 | 解决方案 |
|---|---|
CDP连接失败 |
脚本会自动降级到启动新浏览器,但需要手动登录知网 |
检测到验证码 |
脚本暂停并打印提示,在浏览器完成验证后在终端按 Enter |
知网导出功能需要登录 |
脚本暂停,在浏览器登录后按 Enter |
解析失败 |
原始文本保存到 ~/Downloads/cnki_raw_export_*.txt,可手动检查 |
检索结果为0 |
调整关键词,减少同义词组合或放宽检索范围 |
| 需要调试延迟 | 添加 --delay 1500(增加操作间等待时间,毫秒) |
依赖
playwright(已安装)openpyxl(已安装)- 如脚本提示缺少浏览器:运行
playwright install chromium
More from yipng05-max/-skills
literature-verifier
Verify the authenticity of literature references and detect hallucinations in both English and Chinese (中文) sources. Use when users need to check if a citation is real, verify a DOI, confirm a paper/article/book exists, cross-check author-title-journal-year metadata, detect fabricated references, validate URLs of online articles, or audit a reference list for accuracy. Covers journal papers, conference papers, preprints, books, monographs, newspaper articles, magazine articles, web articles, dissertations, government documents, and any other published works. Supports Chinese academic databases including CNKI (知网), Wanfang (万方), CQVIP (维普), Baidu Scholar (百度学术), and core journal list verification (北大核心, CSSCI, CSCD).
11literature-review-writer
>
9feishu-paper-reviewer
飞书文档论文审阅工具。直接在飞书云文档上进行学术论文审阅,支持高亮、删除线、加粗变色、划词批注、插入审阅意见等多种修订标记。当用户提到对飞书文档/云文档进行论文审阅、审稿、评阅、修改批注,或提供飞书文档链接要求审阅时触发。关键词:飞书论文审阅、飞书审稿、云文档评阅、飞书批注论文。
9cjournal-analyzer
>
8paper-analyzer
学术论文结构化阅读、拆解与分析工具。基于12个阅读要素(研究背景、研究问题、研究结论、文献综合、文献批评、研究方法、理论视角与理论框架、一致性发现、不一致性发现、研究贡献、研究不足、未来研究展望)对论文进行深度拆解,结果保存为Excel文件。当用户提到需要针对论文/文献/paper进行拆解、解析、分析、阅读、梳理,并上传或告知一篇或多篇论文的本地文件路径(PDF、Word等)时触发此skill。
8introduction-writer
|
7
