24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 2323  |  回复: 12
当前主题已经存档。
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

neweroica

木虫 (著名写手)

[交流] [原创] NetLibrary电子书批量下载秘诀 (请求加精)

原文地址见我的博客:
http://blog.csdn.net/neweroica/archive/2006/08/04/1016345.aspx

NetLibrary电子书批量下载秘诀
2006-8-3

学校早就买了NetLibrary,上面提供了许多很棒的英文原版书,可惜只能在浏览器中一页一页地看。虽然可以使用“保存”按钮一页一页地保存成pdf文件,但想要保存一本完整的数百页的书,可得有足够耐心啊。先在网上搜了一下,结果发现似乎还没有牛人公布批量下载NetLibrary电子书的方法。正好今天得闲,便开始琢磨着如何批量下载NetLibrary的电子书。经过一个下午和网上的努力,终于初步开发出一个比较省力省心的办法来。现拿出与大家共享,不过由此引发的版权问题,本人概不负责。

首先,登上NetLibrary,打开你要的电子书链接(“View this eBook”)。
打开的窗口如下图所示:
我们可以查看一下页面范围,点击页面左边导航栏和右上角的“Next >>”按钮,找到全书最后一页,如图所示:
如本例,最后一页是递471页。
注意,这个IE浏览器在后面的步骤中不要关闭!

第二步,删掉IE的临时文件夹(C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files\Content.IE5)中所有的pdf文件。
一种方便的方法是,进入DOS窗口,输入:
cd C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files\Content.IE5
然后输入命令:
for /r . %a in (*.pdf) do del "%a"

第三步,利用网页脚本自动加载每页。
具体方法是:
将下面的代码保存成netlib.htm网页文件:




//书号代码
var bookid = 105483;

//起止页码
var istart =   1;
var iend   =   471;

//延迟时间(秒)
var wtime  = 5;

var ipage = istart;

function getpage(){

    loader.location = 'http://www.netlibrary.com/nlreader/nlReader.dll?BookID=' + bookid + '&FileName=Page_' + ipage + '.pdf';


    if(ipage
        setTimeout('getpage()', wtime*1000);
    }

    ipage = ipage + 1;
}

getpage();

其中的bookid是这本书的代号,可以从IE浏览器页面右上方的frame中点右键“查看源文件”,通过查找“bookid”字段找到这个代号;istart和iend是要下载的起止页码,这里是从第1页到第471页;wtime是自己估计的加载每个页面所需的最长时间,可以根据你的网速估计一下,我这里选择的是5秒钟。
然后双击运行,直到所有页面加载完毕。如下图所示:

第四步,将已经下载完全的每页的pdf文件从IE临时文件夹中按顺序取出。
这个工作其实最麻烦,因为IE临时文件夹中的临时文件是保存在许许多多随机命名的子文件夹之中的(不信请用资源浏览器进入“C:\Documents and Settings\Administrator\Local Settings\Temporary Internet Files\Content.IE5”看看)。而且你会发现刚才加载的那些临时的pdf文件的顺序是乱的,比如第1、4、5页在O1ORGB43子目录下,第2、3、7页在6PDQB2XW子目录下,而第6、8、9页则在W9CN0Z0N子目录下。所以,如果手工将这些pdf文件从IE临时文件夹中取出,将非常麻烦,而且取出后还要按照原书的页码顺序重命名,更是难上加难。为此,我还是用JavaScript编写了一个HTA程序,用来自动完成这些工作。我的思路很简单,就是用程序找出IE临时文件夹中所有的pdf文件,然后按照文件生成时间顺序排序,再将它们复制到硬盘的单独目录(如“C:\”)下,复制后的文件名就是这一页页码的名字。
具体方法是:
将下面代码保存成getpdf.hta文件:


function ShowFolderList(folderspec)
{
   var fso, f, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject";
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.SubFolders);
   s = "";
   for (; !fc.atEnd(); fc.moveNext())
   {
      s += fc.item();
      s += "\n";
   }
   return(s);
}

function ShowFolderFileList(folderspec, filespec)
{
   var fso, f, f1, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject";
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.files);
   s = "";
   for (; !fc.atEnd(); fc.moveNext())
   {
      var st = fc.item() + "";
      var fname = st.split('.');
      var fileext = fname[fname.length-1];
      if( (filespec != '*' && filespec != fileext) || st.length == 0){
          continue;
      }
      //document.write('_'+st+'_
')
      s += fc.item();
      s += "\n";
   }
   return(s);
}

function ShowSubFolderFileList(folderspec, filespec)
{
   var s, i;
   
   var folders = ShowFolderList(folderspec).split('\n');

   s = "";
   for (i=0; i
   {
      if( folders.length == 0){
          continue;
      }
      s += ShowFolderFileList(folders, filespec);
   }
   return(s);
}

function GetFileList(folderspec, filespec)
{
   var s = ShowSubFolderFileList(folderspec, filespec);
   var fa = s.split('\n');
   fa.length = fa.length - 1;
   return fa;
}

function GetFileTime(filespec)
{
   var fso, f, d, t;
   fso = new ActiveXObject("Scripting.FileSystemObject";
   f = fso.GetFile(filespec);
   d=new Date(f.DateCreated);
   return d.getTime();
}


function QuickSort(arr) {
     if (arguments.length>1) {
         var low = arguments[1];
         var high = arguments[2];
     }
     else{
         var low = 0;
         var high = arr.length-1;
     }

     if(low
         // function Partition
         var i = low;
         var j = high;
         var pivot = arr;
         while(i
             while(i=pivot)
                 j--;
                 if(i
                     arr[i++] = arr[j];
             }
         while(i
             i++;
             if(i
                 arr[j--] = arr;
             }
         }//endwhile
         arr = pivot;
         // end function
         var pivotpos = i; //Partition(arr,low,high);
         QuickSort(arr, low, pivotpos-1);
         QuickSort(arr, pivotpos+1, high);
     }
     else{
       return;
     }
   return arr;
}

var fa = new Array();
var ft = new Array();
var sft = new Array();

fa = GetFileList('C:\\Documents and Settings\\Administrator\\Local Settings\\Temporary Internet Files\\Content.IE5', 'pdf');
s ="";
for (i=0; i
    s += GetFileTime(fa)+'
';
    ft = GetFileTime(fa);
    sft = ft;
}

sft = QuickSort(sft);

var ia = new Array();
for(i=0;i
    for(j=0;j
        if(sft == ft[j]){
            ia = j;
            break;
        }
    }
}

var fso, f;
fso = new ActiveXObject("Scripting.FileSystemObject";

for (i=0; i
  f = fso.GetFile(fa[ia]);
  if(i+1
      f.Copy("C:\\00" + (i+1) + ".pdf";
      document.write('00' + (i+1) + '.pdf
');
  }
  else if(i+1
      f.Copy("C:\\0" + (i+1) + ".pdf";
      document.write('0' + (i+1) + '.pdf
');
  }
  else{
      f.Copy("C:\\" + (i+1) + ".pdf";
      document.write((i+1) + '.pdf
');
  }
}


双击运行之后,就会在C:\下看到复制出来的按照页码命名的一系列pdf文件。用Adobe Acrobat就可以将它们合并成一个完整的pdf文件。在整理时要注意检查有没有漏页或重页。弄完后删除掉C:\复制出来的单页文件。
最后,NetLibrary的电子书还有Cover和用小写罗马数字命名的页面(即封面和目录、前言、致谢、凡例等页),对于这些页面,一般不多,可以用手工下载。具体方法是:
在IE浏览器的NetLibrary在线阅读器中进入第一页封面页。然后重复前述第二步操作。
点击在线阅读器右上方的“Next >>”按钮,一页一页地手工加载。
然后重复前述第四步操作。
用Adobe Acrobat将这些页面与前面已合并的正文页整合成完整的一本电子书。在整理时要注意检查有没有漏页或重页。

[ Last edited by neweroica on 2006-10-12 at 11:50 ]
回复此楼

» 收录本帖的淘帖专辑推荐

文献资源

» 猜你喜欢

Simpler, stronger, more tolerant
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

yahoohoo

铁杆木虫 (著名写手)

1

想法非常简单,但却极其使用,顶!!!
10楼2006-10-27 10:02:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 13 个回答

zjwanglei

金虫 (小有名气)

1

高手啊,我要回去试试看!!谢谢!
2楼2006-10-01 02:50:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wguoyong

金虫 (著名写手)

0.5

不错!但没有图例!好像这点小事高手应能解决吧!
http://emuchhelp.ys168.com/
3楼2006-10-01 20:32:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zjwanglei

金虫 (小有名气)

已经试过,确实可行。但这里的代码与博客中想必缺少 script的开始和终止符号。另外,建议不要把时间间隔设定小于5,(我尝试设置成2,结果100页后出现了版权保护提示,反而影响了正常的下载。)还有,有的书的格式并不是PDF,可以考虑修改程序代码中的pdf为html,也可以正常下载,问题就是其中的图片可能会有问题。(还没有测试,等测试后再来报告结果)。总之,非常感谢楼主的工具,小程序可以解决大问题,这正是编程高手的境界呀~!
4楼2006-10-02 06:59:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 085701环境工程,267求调剂 +11 minht 2026-03-26 11/550 2026-03-27 20:52 by 热情沙漠
[考研] 083000学硕274求调剂 +4 Li李鱼 2026-03-26 4/200 2026-03-27 19:42 by ACS Nano——
[考研] 070300求调剂306分 +3 26要上岸 2026-03-27 3/150 2026-03-27 17:57 by arrow8852
[考研] 0703化学 +6 妮妮ninicgb 2026-03-27 6/300 2026-03-27 17:18 by shangxh
[考研] 085600,材料与化工321分调剂 +4 大馋小子 2026-03-27 6/300 2026-03-27 14:11 by 松花缸1201
[考研] 0703化学求调剂,各位老师看看我!!! +4 祁祺祺 2026-03-25 4/200 2026-03-27 13:55 by stillstella
[硕博家园] 北京林业大学硕导招生广告 +6 kongweilin 2026-03-26 8/400 2026-03-27 10:18 by FF_16
[考研] 材料学硕333求调剂 +8 北道巷 2026-03-24 8/400 2026-03-27 10:18 by 我是小康
[考研] 总分322求生物学/生化与分子/生物信息学相关调剂 +5 星沉uu 2026-03-26 6/300 2026-03-26 19:02 by macy2011
[考研] 297求调剂 +6 田洪有 2026-03-26 6/300 2026-03-26 15:55 by 不吃魚的貓
[考研] 一志愿 南京邮电大学 288分 材料考研 求调剂 +3 jl0720 2026-03-26 3/150 2026-03-26 13:39 by zzll406
[考研] 总分293求调剂 +6 加一一九 2026-03-25 8/400 2026-03-26 13:30 by yujianx
[考研] 290分调剂求助 +3 吉祥止止陈 2026-03-25 3/150 2026-03-25 19:58 by barlinike
[考研] 一志愿南航材料专317分求调剂 +5 炸呀炸呀炸薯条 2026-03-23 5/250 2026-03-24 16:52 by 星空星月
[考研] 一志愿吉大化学322求调剂 +4 17501029541 2026-03-23 6/300 2026-03-24 10:21 by 戴围脖的小蚊子
[考研] 材料/农业专业,07/08开头均可,过线就行 +3 呵唔哦豁 2026-03-23 4/200 2026-03-23 22:30 by 汪!?!
[论文投稿] 急发核心期刊论文 +3 贤达问津 2026-03-23 5/250 2026-03-23 17:13 by 妹子不好惹
[考研] 求调剂一志愿海大,0703化学学硕304分,有大创项目,四级已过 +6 幸运哩哩 2026-03-22 10/500 2026-03-22 20:10 by edmund7
[考研] 生物学调剂 +5 Surekei 2026-03-21 5/250 2026-03-22 14:39 by tcx007
[考研] 266求调剂 +3 哇呼哼呼哼 2026-03-20 3/150 2026-03-21 16:46 by barlinike
信息提示
请填处理意见