NetLibrary电子书批量下载秘诀

来源:互联网 发布:淘宝手机如何删除评价 编辑:程序博客网 时间:2024/05/21 11:35

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网页文件:

 

<iframe name=loader src="about:blank" width=800 height=600></iframe>

 

<script>

//书号代码

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 <= iend){

        setTimeout('getpage()', wtime*1000);

    }

 

    ipage = ipage + 1;

}

 

getpage();

</script>

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

然后双击运行,直到所有页面加载完毕。如下图所示:

 

第四步,将已经下载完全的每页的pdf文件从IE临时文件夹中按顺序取出。

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

具体方法是:

将下面代码保存成getpdf.hta文件:

<script>

 

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+'_<br>')

      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<folders.length; i++)

   {

      if( folders[i].length == 0){

          continue;

      }

      s += ShowFolderFileList(folders[i], 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 < high){

         // function Partition

         var i = low;

         var j = high;

         var pivot = arr[i];

         while(i<j){

             while(i<j && arr[j]>=pivot)

                 j--;

                 if(i<j){

                     arr[i++] = arr[j];

             }

         while(i<j && arr[i]<=pivot)

             i++;

             if(i<j){

                 arr[j--] = arr[i];

             }

         }//endwhile

         arr[i] = pivot;

         // end function

         var pivotpos = i; //Partition(arrlowhigh);

         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<fa.length;i++){

    s += GetFileTime(fa[i])+'<br>';

    ft[i] = GetFileTime(fa[i]);

    sft[i] = ft[i];

}

 

sft = QuickSort(sft);

 

var ia = new Array();

for(i=0;i<sft.length;i++){

    for(j=0;j<ft.length;j++){

        if(sft[i] == ft[j]){

            ia[i] = j;

            break;

        }

    }

}

 

var fso, f;

fso = new ActiveXObject("Scripting.FileSystemObject");

 

for (i=0; i<fa.length;i++){

  f = fso.GetFile(fa[ia[i]]);

  if(i+1<10){

      f.Copy("C://00" + (i+1) + ".pdf");

      document.write('00' + (i+1) + '.pdf<br>');

  }

  else if(i+1<100){

      f.Copy("C://0" + (i+1) + ".pdf");

      document.write('0' + (i+1) + '.pdf<br>');

  }

  else{

      f.Copy("C://" + (i+1) + ".pdf");

      document.write((i+1) + '.pdf<br>');

  }

}

 

</script>

双击运行之后,就会在C:/下看到复制出来的按照页码命名的一系列pdf文件。用Adobe Acrobat就可以将它们合并成一个完整的pdf文件。在整理时要注意检查有没有漏页或重页。弄完后删除掉C:/复制出来的单页文件。

最后NetLibrary的电子书还有Cover和用小写罗马数字命名的页面(即封面和目录、前言、致谢、凡例等页),对于这些页面,一般不多,可以用手工下载。具体方法是:

  1. IE浏览器的NetLibrary在线阅读器中进入第一页封面页。然后重复前述第二步操作。
  2. 点击在线阅读器右上方的“Next >>”按钮,一页一页地手工加载。
  3. 然后重复前述第四步操作。
  4. Adobe Acrobat将这些页面与前面已合并的正文页整合成完整的一本电子书。在整理时要注意检查有没有漏页或重页。

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 晚上睡不着觉该怎么办 晚上睡不着该怎么办呢 晚上失眠睡不着该怎么办 晚上一直睡不着该怎么办 怀孕晚上睡不着该怎么办 运动太累睡不着怎么办 运动完睡不着觉怎么办 晚上冷得睡不着怎么办 晚上脚冷睡不着怎么办 短发头发有点乱怎么办 不想让别人睡觉怎么办 15岁晚上睡不着怎么办 16岁青少年失眠怎么办 好累又睡不着怎么办 造口患者拉肚子怎么办? 起床后头发乱怎么办 新生儿睡觉偏头怎么办 婴儿睡觉偏头怎么办 月经期间血下不来怎么办 月经下不来怎么办一点点咖啡色 突然早睡睡不着怎么办 移植后睡不着觉怎么办 孕期喜欢右侧睡怎么办 减肥期间有饭局怎么办 减肥期间晚上聚餐怎么办 减肥中遇到聚餐怎么办 减肥期间遭遇聚餐怎么办? 减肥期间聚会了怎么办 小猫摔到腿了怎么办 晚上睡觉颈椎痛怎么办 孕妇胎儿腿短怎么办 胎宝宝腿短怎么办 孕妇左侧卧睡不着怎么办 大人高烧40.5度怎么办 睡觉后颈椎疼怎么办 发烧到40度怎么办 背疼做针灸没效果怎么办 做完针灸后腰酸背疼怎么办 身体堵的厉害怎么办 身体淤堵严重怎么办 心脏脉跳动无力怎么办