Skip to content
Research
Skill

/cnki-parse-results

Parse current CNKI search results page into structured paper data (title, authors, journal, date, citations). Use after a search has been performed and you need to extract the results.

BOOST
From plugin
cnki-skills
98910 skills1 agent
Install
$ npx -y skills add cookjohn/cnki-skills --skill cnki-parse-results --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/cnki-parse-results

Context preview

The summary Claude sees to decide when to auto-load this skill.

Parse current CNKI search results page into structured paper data (title, authors, journal, date, citations). Use after a search has been performed and you need to extract the results.

SKILL.md

cnki-parse-results.SKILL.md
name: cnki-parse-results
description: Parse current CNKI search results page into structured paper data (title, authors, journal, date, citations). Use after a search has been performed and you need to extract the results.
user-invokable: false

CNKI Parse Search Results

Extract structured paper data from the current CNKI search results page.

Prerequisites

The current Chrome page must be a CNKI search results page (URL contains `kns.cnki.net` and page shows "条结果").

Steps

1. Verify we are on a results page

Use `mcp__chrome-devtools__take_snapshot`. Verify the page contains "条结果". If not, inform the user that no search results page is currently open.

Check for captcha ("拖动下方拼图完成验证") - if found, notify user to solve it manually.

2. Extract results via JavaScript

Use `mcp__chrome-devtools__evaluate_script` with this function:

() => {
  const rows = document.querySelectorAll('.result-table-list tbody tr');
  const checkboxes = document.querySelectorAll('.result-table-list tbody input.cbItem');
  const results = Array.from(rows).map((row, index) => {
    const nameCell = row.querySelector('td.name');
    const titleLink = nameCell?.querySelector('a.fz14');
    const authorCell = row.querySelector('td.author');
    const sourceCell = row.querySelector('td.source');
    const dateCell = row.querySelector('td.date');
    const dataCell = row.querySelector('td.data');
    const quoteCell = row.querySelector('td.quote');
    const downloadCell = row.querySelector('td.download');
    const isOnlineFirst = !!nameCell?.querySelector('.marktip');

    return {
      number: index + 1,
      title: titleLink?.innerText?.trim() || '',
      url: titleLink?.href || '',
      exportId: checkboxes[index]?.value || '',
      authors: Array.from(authorCell?.querySelectorAll('a.KnowledgeNetLink') || []).map(a => a.innerText?.trim()),
      journal: sourceCell?.querySelector('a')?.innerText?.trim() || '',
      date: dateCell?.innerText?.trim() || '',
      database: dataCell?.innerText?.trim() || '',
      citations: quoteCell?.innerText?.trim() || '',
      downloads: downloadCell?.innerText?.trim() || '',
      isOnlineFirst: isOnlineFirst
    };
  });

  const totalText = document.querySelector('.pagerTitleCell')?.innerText || '';
  const totalMatch = totalText.match(/([\d,]+)/);
  const pageInfo = document.querySelector('.countPageMark')?.innerText || '';

  return {
    papers: results,
    totalCount: totalMatch ? totalMatch[1] : 'unknown',
    pageInfo: pageInfo
  };
}

3. Present results

Format as a numbered list:

CNKI search results ({totalCount} total, page {pageInfo}):

1. {title} {isOnlineFirst ? "[网络首发]" : ""}
   Authors: {authors joined by "; "}
   Journal: {journal} | Date: {date} | Type: {database}
   Citations: {citations} | Downloads: {downloads}
   URL: {url}

2. ...

4. Fallback: snapshot-based parsing

If JavaScript returns empty (DOM structure changed), use `mcp__chrome-devtools__take_snapshot` and parse the accessibility tree manually:

Look for the repeating pattern:

  • `checkbox` → `StaticText` (number) → `link` with URL containing `kcms2/article/abstract` (title) → `link`s with URL containing `kcms2/author/detail` (authors) → `link` with URL containing `navi.cnki.net/knavi/detail` (journal) → `StaticText` (date) → `StaticText` (database type)

Verified DOM Selectors (CNKI uses jQuery, stable semantic class names)

| Data | Selector | Notes | |------------|----------------------------------|----------------------------| | Table | `.result-table-list tbody tr` | Each row = one paper | | Checkbox | `input.cbItem` | value = export encrypted ID | | Number | `td.seq` | Row sequence number | | Title | `td.name a.fz14` | Paper title link | | Authors | `td.author a.KnowledgeNetLink` | Author name links | | Journal | `td.source a` | Journal/source link | | Date | `td.date` | Publication date text | | DB Type | `td.data` | Database type (期刊/学位论文) | | Citations | `td.quote` | Citation count | | Downloads | `td.download` | Download count | | Online 1st | `td.name .marktip` | "网络首发" label | | Total | `.pagerTitleCell` | "共找到 X 条结果" | | Page | `.countPageMark` | "1/300" format |

Read more
Ships withcnki-skills

CNKI (中国知网) skills for Claude Code — search, browse journals, download PDFs, export to Zotero via Chrome DevTools MCP

Get the whole plugin
Stats
994
Stars
83
Forks
Quiet
Maintenance
Python
Language
7mo ago
Last commit
7mo ago
Created
5h ago
Added

Repo: cookjohn/cnki-skills

Other skills on cnki-skills.