[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 WHY 于 2018-9-24 23:03 编辑

js 脚本,依照第4行的样子修改第5行
或者:把第4行前面的注释删掉,再删掉第5行,可以下载7个栏目
  1. var fso = new ActiveXObject('Scripting.FileSystemObject');
  2. var http = new ActiveXObject('Microsoft.XMLHTTP');
  3. //var map = {'元曲':'YuanQu','诗经':'ShiJing','楚辞':'ChuCi','乐府诗集':'YueFu','其它古代':'Other','近现代诗':'XianDai','外国诗词':'ForeignPoesy'};
  4. var map = {'诗经':'ShiJing','楚辞':'ChuCi', '近现代诗':'XianDai'};
  5. var home = 'http://www.chinapoesy.com/';
  6. for (var key in map) {
  7.     var n = 0;
  8.     var url = home + map[key] + 'Index' + (key == '外国诗词' ? '.aspx' : '.html');
  9.     var reg = /href='(.+?\.html)'\r?\n\s*target="_blank"/g;
  10.     while(url != '') {
  11.         var txt = getText(url);
  12.         if(!n++) {
  13.             var m1 = txt.match(/\(按照人气排名\).*?href='(.*?\.html)'/);  //按照人气排名有 "更多..." ?
  14.             txt = m1 ? getText(home + m1[1]) : txt.match(/\(按照人气排名\)[\s\S]+?<\/table>/)[0];
  15.         }
  16.         var m2 = txt.match(/href="\/([^"]*\.html)"[^<>]*><img src="\/Images\/Pager\/nextn\.gif"/); //有 "下一页" ?
  17.         url = m2 ? home + m2[1] : '';
  18.         txt = m2 ? txt.match(/>查询中 请稍后…[\s\S]+?<\/table>/)[0] : txt;
  19.         while(arr=reg.exec(txt)) getPoesy(home + arr[1]);
  20.     }
  21. }
  22. //获取网页内容
  23. function getText(url) {
  24.     http.open('GET', url, false);
  25.     http.send();
  26.     with(new ActiveXObject('ADODB.Stream')){
  27.         Mode = 3; Type = 1;
  28.         Open();
  29.         Write(http.responseBody);
  30.         Position = 0;
  31.         Type = 2;
  32.         Charset = 'UTF-8';
  33.         var s = ReadText(-1);
  34.     }
  35.     return s;
  36. }
  37. //获取诗词
  38. function getPoesy(url) {
  39.     var reg = /href='(.+?\.html)'\s*target\s*=\s*"_blank"([\s\S]+?\(\d+\))/g;
  40.     while(url != '') {
  41.         var txt = getText(url);
  42.         var m = txt.match(/href="\/([^"]*\.html)"[^<>]*><img src="\/Images\/Pager\/nextn\.gif"/);  //有 "下一页" ?
  43.         url = m ? home + m[1] : '';
  44.         txt = txt.match(/>编辑它<\/a>[\s\S]+?>关于我们<\/a>/);
  45.         while(arr=reg.exec(txt)) {
  46.             var s = getText(home + arr[1]);                                  //歌词内容
  47.             s = s.split('("#loading").css("display","none");')[1];
  48.             if(!s) return 0;        //某些特定诗词网址打不开,遇到这种情况继续
  49.             s = s.split('<script type="text/javascript">')[0];
  50.             //中文及标点字符后面加 <br />
  51.             s = s.replace(/([\u4E00-\u9FFF。?!,、:”)》】… —])(?:\r?\n|<\/p>)/g, '$1<br />');
  52.             //删除所有标签,保留换行标签,删除空格和html转义空格
  53.             s = s.replace(/<(?!\/?br)[^>]*>|&nbsp;|[  ]+/g, '');
  54.             s = s.replace(/<\/?br>|<br\/>/g, '<br />');   //<br>、</br>、<br/> 替换为 <br />
  55.             s = s.replace(/\r?\n/g, '');
  56.             s = s.replace(/^(?:<br \/>)+/, '');           //删除开头多余的标签
  57.             s = s.replace(/(<br \/>)+$/, '$1');           //删除结尾多余的标签
  58.             s = s.replace(/&middot;/g, '·').replace(/&ldquo;/g, '“').replace(/&rdquo;/g, '”');
  59.             s = s.replace(/&mdash;/g, '—').replace(/&quot;/g, '"');
  60.             s = s.replace(/(?:<br \/>)+/, '\t');          //第一次连续多个换行标签替换为 Tab
  61.             s = s.replace(/(<br \/>)+/, '$1');            //第二次连续多个换行标签替换为一个
  62.             var s1 = arr[2].replace(/[  \r\n]+/g, '').replace(/.*>/, '');  //标题+人气指数
  63.             writeToFile(s1 + '\t' + s);
  64.         }
  65.     }
  66. }
  67. //写入文本
  68. function writeToFile(str) {
  69.     var objFile = fso.OpenTextFile(key + '.Log', 8, true);
  70.     objFile.WriteLine(str);
  71.     objFile.Close();
  72. }
  73. WSH.Echo('Done')
复制代码
1

评分人数

TOP

回复 7# lxh623


    以北岛的第一首诗 爱情故事 (136569)   为例,你想得到的结果是什么?
如果不容易描述,把你希望的文本格式用附件上传。

TOP

本帖最后由 WHY 于 2018-9-22 18:12 编辑

回复 9# lxh623


    已修改,
如果需要合并成一个大的文本,替换第 76 行的 key 为指定的文件名,如:把 key 替换成 'E:/a.txt'

TOP

回复 11# lxh623


    唐诗网址中 html 换行标签不统一,把 6# 第63行改成这样子:
  1. s = s.replace(/<(?!\/?br)[^>]*>|&nbsp;|[  ]+/g, '').replace(/<\/?br>|<br\/>/g, '<br />');
复制代码
宋词网址中又用段落标签代替换行标签,总之就是混乱。

6# 已经提示你,参考4行修改5行。

TOP

本帖最后由 WHY 于 2018-9-24 23:05 编辑

全唐诗.JS
  1. var fso  = new ActiveXObject('Scripting.FileSystemObject');
  2. var http = new ActiveXObject('Microsoft.XMLHTTP');
  3. var home = 'http://www.chinapoesy.com/';
  4. for (var i=0; i<=2; i++) {
  5.     var map = [], map_ = [];
  6.     var url = home + 'TangshiAllindex' + i + '.html';
  7.     var txt = getText(url);
  8.     txt = txt.split('class="Normal">下卷</a>')[1];
  9.     var reg = /href='(.+?\.html)'\r?\n\s*target="_blank"/g;
  10.     while(arr = reg.exec(txt)) {
  11.         url = home + arr[1];
  12.         while(url != '') {
  13.             var s = getText(url);           //歌词页面
  14.             var m = s.match(/href="\/([^"]*\.html)"[^<>]*><img src="\/Images\/Pager\/nextn\.gif"/);//有 "下一页" ?
  15.             url = m ? home + m[1] : '';
  16.             s = s.split('<!-- AspNetPager V6.0.0 for VS2005 End -->')[1];
  17.             if(!s) continue;
  18.             var a = s.split(/<\/li>\r?\n\s*<\/ul>\r?\n\s*\<\/div>/);
  19.             for(var j=0; j<a.length-1; j++) {
  20.                 var ti = a[j].match(/<b>(.*?)<\/b>/)[1];                         //诗词标题
  21.                 var au = a[j].match(/class="Green">\r?\n\s*([^\r\n]*)/)[1];      //作者名
  22.                 var li = a[j].match(/class="LiTitle"><a href='(.*?\.html)'/)[1]; //标题连接
  23.                 if(!map_[au]) {
  24.                     getPopularity(home + li);
  25.                     map_[au] = 1;
  26.                 }
  27.                 writeToFile(getPoesy(a[j]));
  28.             }
  29.         }
  30.     }
  31. }
  32. //获取网页内容
  33. function getText(url) {
  34.     http.open('GET', url, false);
  35.     http.send();
  36.     with(new ActiveXObject('ADODB.Stream')){
  37.         Mode = 3; Type = 1;
  38.         Open();
  39.         Write(http.responseBody);
  40.         Position = 0;
  41.         Type = 2;
  42.         Charset = 'UTF-8';
  43.         var s = ReadText(-1);
  44.     }
  45.     return s;
  46. }
  47. //获取人气指数
  48. function getPopularity(url) {
  49.     while(url != '') {
  50.         var s= getText(url);
  51.         var m = s.match(/href="\/([^"]*\.html)"[^<>]*><img src="\/Images\/Pager\/nextn\.gif"/); //有 "下一页" ?
  52.         url = m ? home + m[1] : '';
  53.         s = s.split('<!-- AspNetPager V6.0.0 for VS2005 End -->')[1];
  54.         if(!s) return 0;
  55.         var reg = /title="([^"]*)\)">[\s\S]+?(\(\d*\))/g;
  56.         while(arr = reg.exec(s)) map[au + arr[1]] = arr[2];
  57.     }
  58. }
  59. //获取诗词
  60. function getPoesy(str) {
  61.     var s = str.replace(/>评论<\/a>/, '>');
  62.     s = s.replace(/([\u4E00-\u9FFF。?!,、:”)》】… —])(?:\r?\n|<\/p>)/g, '$1<br />');
  63.     s = s.replace(/<(?!\/?br)[^>]*>|&nbsp;|[  ]+/g, '');
  64.     s = s.replace(/<\/?br>|<br\/>/g, '<br />');
  65.     s = s.replace(/\r?\n/g, '');
  66.     s = s.replace(/^(?:<br \/>)+/, '');
  67.     s = s.replace(/(<br \/>)+$/, '$1');
  68.     s = s.replace(/(?:<br \/>)+/, '\t');
  69.     s = s.replace(/(<br \/>)+/, '$1');
  70.     return ti + map[au+ti] + '\t' + s;
  71. }
  72. //写入文本
  73. function writeToFile(str) {
  74.     var objFile = fso.OpenTextFile('全唐诗.Log', 8, true);
  75.     objFile.WriteLine(str);
  76.     objFile.Close();
  77. }
  78. WSH.Echo('Done')
复制代码
1

评分人数

TOP

本帖最后由 WHY 于 2018-9-24 23:07 编辑

全宋词.js
  1. var fso = new ActiveXObject('Scripting.FileSystemObject');
  2. var http = new ActiveXObject('Microsoft.XMLHTTP');
  3. var home = 'http://www.chinapoesy.com/';
  4. var url = home + 'SongCiAllIndex_1.html';
  5. var reg = /href='(.+?\.html)'\r?\n\s*target="_blank"/g;
  6. while(url != '') {
  7.     var txt = getText(url);
  8.     var m = txt.match(/href="\/([^"]*\.html)"[^<>]*><img src="\/Images\/Pager\/nextn\.gif"/); //有 "下一页" ?
  9.     url = m ? home + m[1] : '';
  10.     txt = txt.match(/>查询中 请稍后…[\s\S]+?<\/table>/)[0];
  11.     while(arr = reg.exec(txt)) getPoesy(home + arr[1]);
  12. }
  13. //获取网页内容
  14. function getText(url) {
  15.     http.open('GET', url, false);
  16.     http.send();
  17.     with(new ActiveXObject('ADODB.Stream')){
  18.         Mode = 3; Type = 1;
  19.         Open();
  20.         Write(http.responseBody);
  21.         Position = 0;
  22.         Type = 2;
  23.         Charset = 'UTF-8';
  24.         var s = ReadText(-1);
  25.     }
  26.     return s;
  27. }
  28. //获取诗词
  29. function getPoesy(url) {
  30.     var reg = /href='(.+?\.html)'\s*target\s*=\s*"_blank"([\s\S]+?)(\(\d+\))/g;
  31.     while(url != '') {
  32.         var txt = getText(url);
  33.         var m = txt.match(/href="\/([^"]*\.html)"[^<>]*><img src="\/Images\/Pager\/nextn\.gif"/);  //有 "下一页" ?
  34.         url = m ? home + m[1] : '';
  35.         txt = txt.match(/>编辑它<\/a>[\s\S]+?>关于我们<\/a>/);
  36.         while(arr = reg.exec(txt)) {
  37.             var s = getText(home + arr[1]);                         //歌词内容
  38.             s = s.split('("#loading").css("display","none");')[1];
  39.             if(!s) return 0;
  40.             s = s.split('<script type="text/javascript">')[0];
  41.             s = s.replace(/([\u4E00-\u9FFF。?!,、:”)》】… —])(?:\r?\n|<\/p>)/g, '$1<br />');
  42.             s = s.replace(/<(?!\/?br)[^>]*>|&nbsp;|[  ]+/g, '');
  43.             s = s.replace(/<\/?br>|<br\/>/g, '<br />');
  44.             s = s.replace(/\r?\n/g, '');
  45.             s = s.replace(/^(?:<br \/>)+/, '');
  46.             s = s.replace(/(<br \/>)+$/, '$1');
  47.             s = s.replace(/(?:<br \/>)+/, '\t');
  48.             s = s.replace(/(<br \/>)+/, '$1');
  49.             var s1 = arr[2].match(/title\s*=\s*"([^"]*?)\)"/)[1];  //标题
  50.             var s2 = arr[3];                                       //人气指数
  51.             writeToFile(s1 + s2 + '\t' + s);
  52.         }
  53.     }
  54. }
  55. //写入文本
  56. function writeToFile(str) {
  57.     var objFile = fso.OpenTextFile('全宋词.Log', 8, true);
  58.     objFile.WriteLine(str);
  59.     objFile.Close();
  60. }
  61. WSH.Echo('Done')
复制代码
1

评分人数

TOP

6、14、15 楼脚本更新,换行标签及人气指数问题已经解决
全唐诗、全宋词脚本分开写,实在不想再多花时间了。

TOP

返回列表