在中国知网下载 PDF 格式的学位论文

其他 专栏收录该内容
12 篇文章 0 订阅

在中国知网下载 PDF 格式的学位论文

中国知网真是奇怪,非要自己搞出一个封闭的 CAJ 格式,学位论文还不提供 PDF 的格式,逼着人们只能去下载它们的 CAJViewer,最不可忍受的是竟然没有 Linux 下的版本!

但是群众的智慧是无穷的,最近发现,通过一个 userscript 就可以给学位论文页面加上“PDF 下载”的按钮。

所谓 userscript,就是一个浏览器插件,能够动态地修改页面内容。在 Chrome 浏览器中,需要安装 tampermonkey 插件来管理 userscripts,FireFox 中可以使用 Greasemonkey。

脚本的内容可以从这里获取。原本的域名是 userscripts.org,但这个网站似乎挂了很久了,不过镜像站 userscripts-mirror.org 一直可用。
代码

为了保险,将脚本完整内容复制在此:


// ==UserScript==
// @id             CNKI-PDF-Special
// @name           CNKI 中国知网 PDF 全文下载(特制版)
// @version        1.25
// @namespace      http://yuelong.info
// @author         YUE Long
// @updateURL      https://userscripts.org/scripts/source/164338.meta.js
// @description    ① 点击 CNKI 检索结果界面中的下载按钮可以直接下载 PDF 格式文献;
//                 ② 在硕士/博士学位论文详细信息界面添加“PDF下载”按钮。
//                 ※ 特制版功能:在检索页面中的硕士/博士论文默认下载 CAJ 文件。
// @include        http://*.cnki.net/*
// @include        http://*.cnki.net.*/*
// @run-at         document-idle
// ==/UserScript==

var allLis, thisLi, newLi, aPDF, allLinks, thisLink, pageType;
pageType = true;

allLinks = document.evaluate(
    '//a[@href]',
    document,
    null,
    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    null);

allLis = document.evaluate(
    "//li[@class]",
    document,
    null,
    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    null);

if (allLis) {
    for (var i = 0; i < allLis.snapshotLength; i++) {
        thisLi = allLis.snapshotItem(i);
        if (thisLi.getAttribute("class").indexOf("readol") !== -1) {
            pageType = false;
            newLi = document.createElement('li');
            newLi.setAttribute("class","pdf");
            aPDF = '<a target="_blank" href="' +
                   thisLi.firstChild.href.replace("&dflag=readonline","&dflag=pdfdown") +
                   '">PDF下载</a>';
            newLi.innerHTML=aPDF;
            thisLi.parentNode.insertBefore(newLi, thisLi.nextSibling);
        }
        if (thisLi.getAttribute("class").indexOf("cajNew") !== -1) {
            pageType = false;
        }
    }
}

if (pageType) {
    for (var i = 0; i < allLinks.snapshotLength; i++) {
        thisLink = allLinks.snapshotItem(i);
        if (thisLink.href &&
            thisLink.href.indexOf("download.aspx?filename=") != -1 &&
            thisLink.href.indexOf("&dflag") == -1 &&
            thisLink.href.indexOf("=CMFD") == -1 &&
            thisLink.href.indexOf("=CDFD") == -1
        ) {
            thisLink.href = thisLink.href + "&dflag=pdfdown";
        }
        if (thisLink.href &&
            thisLink.href.indexOf("download.aspx?filename=") != -1 &&
            thisLink.href.indexOf("&dflag") == -1 &&
            (thisLink.href.indexOf("=CMFD") !== -1 || thisLink.href.indexOf("=CDFD") !== -1 )
        ) {
            thisLink.href = thisLink.href + "&dflag=nhdown";
        }
    }
}

把这段代码添加到 Tampermonkey 中,再访问知网,点开一个学位论文的页面,就能从上面看到“PDF 下载”的按钮了。就像这样:

学位论文可以下载 PDF 格式
关于 Userscript

UserScript 就是一段 JavaScript 代码,当一个页面加载完成之后,这段 JavaScript 就会自动执行,效果就和在调试工具的终端里执行 JavaScript 一样。因此,Userscript 能够访问操作 DOM 节点,能使用页面引用的所有库。

UserScript 通常由浏览器的插件来管理,例如 FireFox 有 Greasemonkey,Webkit/Blink 内核的浏览器则有 Tampermonkey,而且这些工具支持的 UserScripts 接口相同,同样的 UserScript 在不同的管理插件下执行效果相同。

至于代码开头的那一段注释,其实就是这个 Userscript 的元数据,其中描述了代码的名称、版本、作者,以及作用于哪些网页等等。

注:这里是这段带码的原始出处。

这个脚本可以在能够下载CAJ文件的情况下,提供PDF文件的下载链接,这下不用wine CAJViewer了,Ubuntu/Linux用户福音

主要实现了一下两个功能:

    在文献检索结果列表界面中,点击或后,可以直接下载 PDF 文件,而非 CAJ/NH 文件;
    在博士/硕士学位论文详细信息界面添加了“PDF下载”按钮,实现了博士/硕士学位论文的 PDF 下载功能,如下图所示。

脚本使用方法:在 Firefox 中先安装 Greasemonkey 或 Scriptish 扩展后,再安装脚本;在 Chrome 中请参考这篇文章(wu.nerd注:Chrome直接拖到Extensions页面即可);在 Safari 中借助 Ninjiakit 使用(感谢 Heart7)。IE 尚不能使用。

脚本下载地址:http://userscripts.org/scripts/show/162636

UPDATE(2013/04/06):感谢 Troy 的建议,我制作了一个特制版的脚本。其特别之处在于可以在检索页面中的硕士/博士论文默认下载 CAJ/NH 文件,避免了 PDF 文件没有目录所带来的遗憾。

特制版脚本下载地址:http://userscripts.org/scripts/show/164338

P.S. 这段代码实现 PDF 下载的原理并不高神,只是修改了下载链接,改了一些 GET 参数。因此可以推断,CAJ 格式实际上与 PDF 非常相似,知网的服务器可以实现格式的转换。这样转出来的 PDF 是文字版,虽然没有 CAJ 中的目录,基本需求已经完全满足。
  • 2
    点赞
  • 6
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值