知网高级检索论文工具
使用Chrome DevTools MCP工具在知网高级检索页面自动执行检索操作,提取CSSCI来源期刊论文的题录和摘要信息。
Step 0: 解析用户关键词
从用户输入中提取检索关键词,组织为检索表达式:
- 单组关键词:关键词及其同义词/同位词用
+连接(+前后各一个空格),填入同一个主题检索框- 例:用户说"数字化转型"→ 检索词为
数字化转型 + 数字化变革 + 数字化
- 例:用户说"数字化转型"→ 检索词为
- 多组关键词:每组填入独立的主题检索框,组间关系选OR
- 例:用户说"数字化转型与企业绩效"→ 第一组
数字化转型 + 数字化变革,第二组企业绩效 + 企业业绩 + 组织绩效
- 例:用户说"数字化转型与企业绩效"→ 第一组
向用户确认关键词分组和同义词扩展后再执行检索。
Step 1: 打开知网高级检索页面
navigate_page → https://kns.cnki.net/kns8s/AdvSearch
验证码处理:若snapshot中出现"拖动下方拼图完成验证"或"安全验证"文本,提示用户:
"知网需要安全验证,请在浏览器中完成滑块验证,完成后告诉我。"
等用户确认后继续。
Step 2: 选择"学术期刊"类别
take_snapshot查看页面,找到底部类别选项卡,点击"学术期刊"链接。
页面会刷新检索表单,出现来源类别选项(CSSCI、SCI、北大核心等)。
Step 3: 勾选CSSCI来源类别
take_snapshot确认来源类别区域已显示,找到"CSSCI"对应的checkbox元素并点击勾选。
先取消"全部期刊"的勾选(如已勾选),再勾选"CSSCI"。
Step 4: 输入主题检索词
4.1 第一组关键词
找到第一个"主题"检索框(默认已存在),用fill工具输入第一组关键词表达式。
示例:数字化转型 + 数字化变革 + 数字化
4.2 多组关键词(如有)
若有多组关键词:
- 点击"+"按钮添加新检索行
- take_snapshot查看新增行
- 修改新增行的检索字段类型:新增行默认可能不是"主题",需点击字段类型下拉框,选择"主题"
- 修改逻辑运算符:点击两行之间的运算符下拉框(默认"AND"),改选"OR"
- 填入第二组关键词:在新增行的检索框中fill第二组关键词表达式
重复以上步骤添加更多组。
运算符说明
知网高级检索框内的运算符:
+(或):前后各留一个空格,如关键词A + 关键词B*(与):前后各留一个空格-(非):前后各留一个空格
Step 5: 执行检索
点击"检索"按钮,等待结果页加载。
wait_for → "检索结果" 或等待结果列表出现
若出现验证码,提示用户完成后重试。
Step 6: 按被引量排序
在检索结果页take_snapshot,找到排序选项区域,点击"被引"排序按钮使结果按被引数量从高到低排列。
可能需要点击两次(第一次升序,第二次降序),确认排序方向为降序(被引最多的在前)。
Step 7: 切换每页显示50条
take_snapshot查看分页区域,找到每页显示数量的下拉选项或链接(默认20条),切换为50条。
通常页面底部有 20 | 50 的选项,点击"50"。
Step 8: 切换摘要视图
找到50旁边的视图切换图标(通常是列表视图/摘要视图的切换按钮),点击打开"摘要视图"(或称"详细视图"),使页面显示每篇论文的完整摘要。
take_snapshot确认摘要内容已展示。
Step 9: 提取题录和摘要信息
从第一页开始,逐页提取论文信息,直到收集满100篇或所有论文提取完毕。
9.1 每页数据提取
使用evaluate_script提取当前页所有论文信息:
() => {
const articles = [];
// 摘要视图下,每篇论文是一个独立的结果块
document.querySelectorAll('.result-table-list tbody tr, .briefDl_D').forEach(item => {
const titleEl = item.querySelector('.fz14, a.fz14');
const authorEl = item.querySelector('.author, .authorSpan');
const sourceEl = item.querySelector('.source, .journalSpan');
const dateEl = item.querySelector('.date, .yearSpan');
const citeEl = item.querySelector('.quote, .citeSpan');
const downloadEl = item.querySelector('.download, .downloadSpan');
const absEl = item.querySelector('.abstract, .absSpan');
if (titleEl) {
articles.push({
title: titleEl.textContent.trim(),
authors: authorEl?.textContent?.trim() || '',
source: sourceEl?.textContent?.trim() || '',
date: dateEl?.textContent?.trim() || '',
citations: citeEl?.textContent?.trim() || '',
downloads: downloadEl?.textContent?.trim() || '',
abstract: absEl?.textContent?.trim() || ''
});
}
});
return articles;
}
注意:知网页面DOM结构可能更新,上述选择器为参考。实际操作时先take_snapshot查看结果页的元素结构,根据实际uid和DOM结构调整提取逻辑。优先使用snapshot中可见的文本内容直接读取。
9.2 逐页提取
- 每页提取50篇,第1页提取后点击"下一页"继续
- 总计提取前100篇(即前2页);若总结果不足100篇,提取全部
- 每次翻页后等待页面加载完成再提取
9.3 数据结构
每篇论文提取以下字段:
| 字段 | 说明 |
|---|---|
| 序号 | 1-100 |
| 标题 | 论文标题 |
| 作者 | 所有作者,分号分隔 |
| 来源期刊 | 期刊名称 |
| 发表时间 | 年份/期次 |
| 被引次数 | 被引用数量 |
| 下载次数 | 下载数量 |
| 摘要 | 完整摘要文本 |
Step 10: 保存为Excel
使用Python脚本将提取的数据保存为Excel文件:
import json
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, PatternFill, Border, Side
wb = Workbook()
ws = wb.active
ws.title = "检索结果"
# 表头
headers = ["序号", "标题", "作者", "来源期刊", "发表时间", "被引次数", "下载次数", "摘要"]
header_font = Font(bold=True, size=11)
header_fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
header_font_white = Font(bold=True, size=11, color="FFFFFF")
for col, h in enumerate(headers, 1):
cell = ws.cell(row=1, column=col, value=h)
cell.font = header_font_white
cell.fill = header_fill
cell.alignment = Alignment(horizontal='center', vertical='center')
# 数据行
for i, article in enumerate(articles, 1):
ws.cell(row=i+1, column=1, value=i)
ws.cell(row=i+1, column=2, value=article['title'])
ws.cell(row=i+1, column=3, value=article['authors'])
ws.cell(row=i+1, column=4, value=article['source'])
ws.cell(row=i+1, column=5, value=article['date'])
ws.cell(row=i+1, column=6, value=article.get('citations', ''))
ws.cell(row=i+1, column=7, value=article.get('downloads', ''))
cell = ws.cell(row=i+1, column=8, value=article.get('abstract', ''))
cell.alignment = Alignment(wrap_text=True, vertical='top')
# 列宽
ws.column_dimensions['A'].width = 6
ws.column_dimensions['B'].width = 50
ws.column_dimensions['C'].width = 20
ws.column_dimensions['D'].width = 20
ws.column_dimensions['E'].width = 12
ws.column_dimensions['F'].width = 10
ws.column_dimensions['G'].width = 10
ws.column_dimensions['H'].width = 80
ws.auto_filter.ref = ws.dimensions
ws.freeze_panes = 'A2'
wb.save(output_path)
文件保存至 ~/Downloads/知网检索结果_{关键词摘要}_{日期}.xlsx。
安装依赖:pip3 install openpyxl
注意事项
- 知网有反爬机制,每步操作间隔1-2秒,避免频繁请求
- 验证码出现时必须请用户手动完成
- 检索前向用户确认关键词分组和同义词扩展
- 全程向用户报告进度
- 若evaluate_script提取数据不完整,改用snapshot逐条读取
- 若总结果不足100篇,告知用户实际数量并全部提取