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


    在中国知网下载 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 中的目录,基本需求已经完全满足。
    
  • 相关阅读:
    GO开发[一]:golang语言初探
    Python带参数的装饰器
    Python函数篇
    19. logging模块
    18. json模块
    17. os模块
    16. sys模块
    15. random模块
    14. 模块-time模块
    29. java面向对象项目
  • 原文地址:https://www.cnblogs.com/bishi/p/5698946.html
Copyright © 2020-2023  润新知