科学文库PDF原文下载方法

感想23,439

“科学文库”是科学出版社数字图书全文检索、在线浏览和下载借阅的平台,拥有十分优质而且丰富的专业知识教材类书籍,包括专著、教材、图集、报告、工具书、大众科普等;涉及学科范围广:覆盖自然科学、工程与技术科学、人文与社会科学、医药科学、农业科学五大门类的所有一级学科,所有图书按标准学科和中图法两个体系进行分类;时间跨度大:收录资料出版时间从1951至今,电子版资料扫描清晰便于阅读。对于广大学生、科研群体来说,是查找资料的极好补充(顺便推荐一下Z-library)。

不过,科学文库在下载上有着很严格的管理,不仅要求在学校IP上登录才能下载文献,而且仅能下载caj格式,并且下载后还有时间上的限制,而在线浏览也有100页限制。这能忍?身为大学生自然应当学会科学地获取资料。经过一番查找和整合,我找到了一种较为方便,无需更改网页js代码,仅从网络数据中获取高清PDF格式文件下载地址的方法。9cde6627d907e7906bbaa4a686d537d87abab705.jpg@942w_554h_progressive.webp首先,使用edge/chrome或其他一切支持F12打开开发人员工具的浏览器打开科学文库网页链接:科学文库 (sciencereading.cn)-https://book.sciencereading.cn/shop/main/Login/shopFrame.do,在搜索栏查找自己需要的资料,如输入“混沌系统与混沌电路”,即可找到杨晓松,李清都编写的这一本教材。8547f25f7282819a273a19eaa27e517d5d848e91.jpg@942w_491h_progressive.webp点击“阅读”键,进入网页版阅读界面。然而此时我们仅能看到此文件的前100页,也无法进行文件的下载。于是我们按下F12键打开调试窗口,选择其中的“网络”窗口,并将筛选器选择为“全部”,之后刷新当前网络浏览器页面。8d27ba75a94f295f2926d2559e75488936fed9de.jpg@942w_549h_progressive.webp在右侧的列表中,我们向下拉动,找到一个名为“add”的项目,查看标头可知这是一个POST请求报文;再点击查看“响应”,得到响应为:文章源自奇派空间-https://www.qipie.com/115.html

{"result":"bdb198ce1d55412da0d90519d1e2dc79"}文章源自奇派空间-https://www.qipie.com/115.html

这一条信息我们复制下载保存好,在之后的文件查找中会用到。b13dcee92245ae5bce2a0f1dfbae31e79835c615.jpg@942w_621h_progressive.webp之后我们在向下拉动,找到一条名为info?fileld=……的项目,是一个GET请求,并且得到其响应为:文章源自奇派空间-https://www.qipie.com/115.html

{"plugins":1023,"assertUrl":"http://159.226.241.32:8093/asserts/bdb198ce1d55412da0d90519d1e2dc79/","userName":"Guest","fileid":"bdb198ce1d55412da0d90519d1e2dc79","fname":"B957802B54EBF4D4FB4F998D3FEF31013000.pdf"}文章源自奇派空间-https://www.qipie.com/115.html

我们从中截取assertUrl的地址,并仅取其根地址http://159.226.241.32:8093/,在新页面进入。文章源自奇派空间-https://www.qipie.com/115.html

此时我们来到了一个和之前的网页阅读界面能像的地方,展示给我们的是该页面的DEMO文档。可以在右上角看到一个云端符号,这是离线阅读功能。我们依旧使用F12并刷新网页,随后点击该云端符号,开启离线模式,电脑会自动下载当前DEMO文件。我们并不需要这个DEMO文件,这一步的作用是获得文件下载的直接地址。43e843c9f57f62d567274e7db63cd5fe636a9ad1.jpg@942w_336h_progressive.webp此时我们向下查找,可以在底部找到一个名为getDocumentbuffer的项目,在标头里就可以看到这是一个GET请求,其请求的URL为:文章源自奇派空间-https://www.qipie.com/115.html

http://159.226.241.32:8093/api/file/159f60495bcc4cc5a6dec0aae46f5f14/getDocumentbuffer98e1424fac2a145eb1f543bff4f0ba522cceb06c.jpg@942w_623h_progressive.webp还记得我们之前在“add”里找到的那串字符bdb198ce1d55412da0d90519d1e2dc79吗?将它替换到上述URL里file/……/getDocumentbuffer之间,在新窗口打开这一条新的地址,成了!我们已经将自己想要下载的资料在浏览器自带的PDF阅读插件中打开,可以自由下载了,仔细看看,公式符号十分的清晰,阅读体验十分的美好。文章源自奇派空间-https://www.qipie.com/115.html

---------------------------------------------------------------------------------------------------------一、接口科学文库作为高校阅读的电子书库,但是由于在线文档打开的速度太慢,获取里面的电子书成了首要问题,而且它提供下载的电子书,又需要CAJViewer阅读器才能打开,并不利于正常的阅读以及分享传播。文章源自奇派空间-https://www.qipie.com/115.html

以前获取电子书靠的是图片拼接,这样太麻烦,正巧有网友分享了一个新的方法,通过调用在线阅读器的离线下载地址,让科学文库的电子书能够快捷下载。文章源自奇派空间-https://www.qipie.com/115.html

简单来说,福昕的在线阅读器提供了一个离线下载地址文章源自奇派空间-https://www.qipie.com/115.html

http://159.226.241.32:8093/api/file/***/getDocumentbuffer

其中***处需要我们通过一本电子书的文件ID(fileID)二、原理通过对网站进行抓包分析,发现其向网址为https://wkobwp.sciencereading.cn/api/file/add的网页发送post请求,返回的正是所需文件的ID。

通过对POST请求的分析,发现需要传入参数,其中file这个参数是最主要的,它就是科学文库给电子书命名的ID,通过上述所说的地址,获取了福昕阅读器的对该电子书命名的ID,实现了ID转换。

在JavaScript中,一般使用ajax进行跨域请求,获取返回的数据。

将ajax拿到的数据替换***,再访问就能够下载了。三、代码

/*
 * @name: 科学文库下载工具
 * @Author: Harl02
 * @version: 1.0
 * @description: 帮助下载电子书
 * @include: book.sciencereading.cn
 * @createTime: 2022-08-09-21:30
 * @updateTime: 2022-08-09-21:30
 */

  /* 判断该网站是否执行脚本*/
var host = 'book.sciencereading.cn';
if (host == window.location.hostname){

//下载地址的前缀和后缀
var pre_url = 'http://159.226.241.32:8093/api/file/';
var suf_url = '/getDocumentbuffer';
//获取地址栏上的图书编号
var url = window.location.href;
var id = url.match('(?<=id=).*');

//ajax获取id
var ajax = null;
if(window.XMLHttpRequest){
 ajax = new XMLHttpRequest();
}else{
  ajax = new ActiveXObject("Mincrosoft.XMLHTTP");
} ;
 ajax.open("POST","https://wkobwp.sciencereading.cn/api/file/add");
 ajax.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
 //构造参数
 ajax.send('params=%7B%22params%22%3A%7B%22file%22%3A%22http%3A%2F%2F159.226.241.32%3A81%2F' + id + '.pdf%22%7D%7D');

 ajax.onreadystatechange = function(){
     if(ajax.readyState == 4&& ajax.status ==200){
      //通过正则获取返回的id
       var fileid = (ajax.responseText).match('(?<="result":").*(?=")');
       var target_url = pre_url + fileid + suf_url;
      
      //创建悬浮按钮及其监听事件
  const d=document.createElement('div');
  d.innerHTML='<div id="download">下载</div>';
  d.style='position:fixed;right:15px;bottom:20%;color:#000000;background:#FFFFFF';
  document.body.append(d);
  document.getElementById('download').onclick=()=>{
     window.location.replace(target_url);
       };
     };
   };
};

四、总结原理就是通过在线阅读器的下载地址获取电子书,因为需要用post请求和配置参数,所以需要ajax跨域请求,完成ID的转换,实现了知道科学文库的电子书网址,可以知道电子书的下载地址。

 
  • 本文由 diego 发表于 2022年8月19日00:08:42
  • 转载请务必保留本文链接:https://www.qipie.com/115.html
评论  2  访客  2
    • 往年初夏
      往年初夏 0

      亲测无效!http://159.226.241.32:8093/api/file/5a980e3c47914785b8c1806306176a7b/getDocumentbuffer无法打开

        • rain
          rain 0

          @ 往年初夏 经测试,是因为foxit webpdf viewer的getDocumentbuffer无响应,即无法开启离线模式。解决方法未知

      匿名

      发表评论

      匿名网友