Board logo

标题: 【已解决】40元求批处理抓网站句子 [打印本页]

作者: lxh623    时间: 2018-9-28 16:01     标题: 【已解决】40元求批处理抓网站句子

本帖最后由 lxh623 于 2018-10-15 19:36 编辑

https://www.juzimi.com/dynasty/先秦
后面有先秦名人、汉朝、魏晋、南北朝、隋唐五代、宋朝、元朝、明朝、清朝、近现代等等。最后一个国外,点开,有美国名人、英国、法国、德国、日本、俄罗斯、希腊、罗马、意大利、奥地利、印度等等。
每一个名人的名言,希望最后加上他的名字。格式“--爱因斯坦”。
https://www.juzimi.com/books
后面也有几个,书籍名句、电影台词、小说摘抄、散文美句、动漫语录、连续剧台词、古文名句。
https://www.juzimi.com/writers
下面有个按照名言内容分类,爱情 读书 励志 时间 友情 诚信 爱国 激励 勤奋 奉献 真理 道德 理想 人生 数学 英语 母爱 劳动 亲情 创新 团结 童年 感恩 目标等等。
https://www.juzimi.com/original/week
又还有本周热门原创、最新原创句子、推荐原创句子。

希望得到的结果,一个自然段为一行,第二个例子,最后的来源最好,取消转行,加个“--”附在最后一行:
喜欢(19498)
知我者,谓我心忧;不知我者,谓我何求。--《黍离》--诗经
喜欢(163)
你说,春风落十里,相思书无笔。
后来,烟火总迷离,世事已忘机。
喜欢(317)
仙人掌不是花,没人会捧在手心里--《悲伤逆流成河》
喜欢(6328)
教育就是当一个人把在学校所学全部忘光之后剩下的东西。
Education is what remains after one has forgotten everything one has learned in school.--爱因斯坦

感觉有点复杂,40元。谢谢!!
但愿是最近最后一个。不好意思!
作者: flashercs    时间: 2018-9-29 12:08

本帖最后由 flashercs 于 2018-11-29 18:41 编辑

保存为 下载.js
下载的项目参数在最后 ,自己改
  1. (function () {
  2.     var xhr = (function () {
  3.         var aXMLHttpVers = ['MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
  4.         for (var i = 0; i < aXMLHttpVers.length; i++) {
  5.             try {
  6.                 return new ActiveXObject(aXMLHttpVers[i]);
  7.             } catch (error) { }
  8.         }
  9.         showError('Can\'t build XMLHTTP automation object.');
  10.         WScript.Quit(1);
  11.     })(),
  12.         fso = new ActiveXObject('Scripting.FileSystemObject'),
  13.         domain = 'https://www.juzimi.com/',
  14.         key,
  15.         arr,
  16.         arrOut = [],
  17.         ts,
  18.         sCache,
  19.         tsCache,
  20.         tsLog,
  21.         file,
  22.         reList = /<a[^>]+href="([^"]+)"[^>]*>([^<>]*)<\/a>/gi,
  23.         reNextPage = /<li[^>]+class="pager-next[^"]*"[^>]*>\s*<a[^>]+href="([^"]+)"[^>]*>下一页<\/a>\s*<\/li>/i,
  24.         reAuthor = /<div[^>]+class="views-field-name"[^>]*>\s*<a[^>]+href="([^"]+)"[^>]*>([^<>]+)<\/a>\s*<\/div>/gi,
  25.         reTid = /<div[^>]+class="views-field-tid">\s*<a[^>]+href="([^"]+)">/gi,
  26.         reContent = /<div class="views-field-phpcode-1">([\S\s]+?)<\/div>(?:\s*<div class="xqjulistwafo">([\S\s]*?)<\/div>)?\s*<div class="views-field-ops">([\S\s]*?)<\/div>/gi,
  27.         reC1 = /<div[^>]+class="view-content"[^>]*>[\S\s]+?<div[^>]+class="view-footer"[^>]*>/i,
  28.         reC2 = /<div[^>]+class="view-content"[^>]*>[\S\s]+?<div[^>]+class="item-list"[^>]*>/i,
  29.         reReplace = /(<span[^>]*>(全文)<\/span>|<[^<>]*>|&nbsp;|\n|\r)+/gi,
  30.         reReplaceOriginal = /<span[^>]*>(原创)<\/span>|<[^<>]*>|(&nbsp;|\n|\r)+/gi,
  31.         oWeek = {
  32.             '本周热门原创': 'https://www.juzimi.com/original/week',
  33.             '最新原创句子': 'https://www.juzimi.com/original/ju',
  34.             '推荐原创句子': 'https://www.juzimi.com/original/recommend'
  35.         },
  36.         oCache = {};
  37.     new ActiveXObject('WScript.Shell').CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName);
  38.     try {
  39.         var arrTitle = getHtml(domain + 'writers').split(/<div[^>]+id="block-block-20"[^>]*>|<div[^>]*>按句子\/名言类别:<\/div>|<div[^>]*>按名言内容类型:<\/div>/);
  40.         arrTitle.shift();
  41.         arrTitle[2] = /<div[^>]*>[\S\s]*?<\/div>/.exec(arrTitle[2])[0];
  42.     } catch (e) {
  43.         WScript.Quit(5);
  44.     }
  45.     //Define cache file path
  46.     sCache = fso.GetSpecialFolder(2).Path + '\\' + encodeURIComponent(domain) + '.cache';
  47.     //Read cache
  48.     try {
  49.         tsCache = fso.OpenTextFile(sCache, 1, false);
  50.         while (!tsCache.AtEndOfStream) {
  51.             oCache[tsCache.ReadLine()] = true;
  52.         }
  53.         tsCache.Close();
  54.     } catch (e) {
  55.         // WScript.Echo('Can not read Cache');
  56.         // WScript.Quit(2);
  57.     }
  58.     //Write cache
  59.     try {
  60.         tsCache = fso.OpenTextFile(sCache, 8, true);
  61.     } catch (e) {
  62.         WScript.Echo('Can not write Cache');
  63.         WScript.Quit(3);
  64.     }
  65.     for (var i = 0, l = arguments.length; i < l; ++i) {
  66.         if (oWeek[arguments[i]]) {
  67.             if (oCache[oWeek[arguments[i]]]) continue;
  68.             file = arguments[i] + '.txt';
  69.             try {
  70.                 ts = fso.OpenTextFile(file, 8, true);
  71.             } catch (error) {
  72.                 showError(error, 'Opening file ' + file);
  73.                 continue;
  74.             }
  75.             try {
  76.                 getContentOriginal(oWeek[arguments[i]]);
  77.                 tsCache.WriteLine(oWeek[arguments[i]]);
  78.             } catch (e) {
  79.                 showError(e);
  80.             }
  81.             ts.Close();
  82.             continue;
  83.         }
  84.         for (key in arrTitle) {
  85.             arr = RegExp('<a[^>]+href="([^"]+)"[^>]*>' + arguments[i] + '</a>', 'i').exec(arrTitle[key]);
  86.             if (!arr) {
  87.                 // showError('Cannot find ' + arguments[i]);
  88.                 continue;
  89.             }
  90.             if (oCache[domain + arr[1]]) break;
  91.             //get nav menu url
  92.             file = arguments[i] + '.txt';
  93.             try {
  94.                 ts = fso.OpenTextFile(file, 8, true);
  95.             } catch (error) {
  96.                 showError(error, 'Opening file ' + file);
  97.                 continue;
  98.             }
  99.             //get list
  100.             try {
  101.                 switch (key) {
  102.                     case '0':
  103.                         getList(domain + arr[1]);
  104.                         break;
  105.                     case '1':
  106.                         getList2(domain + arr[1]);
  107.                         break;
  108.                     default:
  109.                         getContent(domain + arr[1]);
  110.                 }
  111.                 tsCache.WriteLine(domain + arr[1]);
  112.             } catch (e) {
  113.                 showError(e);
  114.             }
  115.             //end list
  116.             ts.Close();
  117.             //end nav menu
  118.             break;
  119.         }
  120.     }
  121.     tsCache.Close();
  122.     WScript.Echo('Mission complete.');
  123.     function getList2(url) {
  124.         var str, arr;
  125.         str = getHtml(url);
  126.         if (!oCache[url]) {
  127.             while (arr = reTid.exec(str)) {
  128.                 // arrOut.unshift('--' + arr[2]);
  129.                 //get content
  130.                 getContent(domain + arr[1]);
  131.                 //end content
  132.             }
  133.             tsCache.WriteLine(url);
  134.         }
  135.         //nextpage?
  136.         if (arr = reNextPage.exec(str)) {
  137.             getList2(domain + arr[1]);
  138.         }
  139.     }
  140.     function getList(url) {
  141.         var str, arr;
  142.         str = getHtml(url);
  143.         if (!oCache[url]) {
  144.             while (arr = reAuthor.exec(str)) {
  145.                 arrOut.unshift('--' + arr[2]);
  146.                 //get content
  147.                 getContent(domain + arr[1]);
  148.                 arrOut.shift();
  149.                 //end content
  150.             }
  151.             tsCache.WriteLine(url);
  152.         }
  153.         //nextpage?
  154.         if (arr = reNextPage.exec(str)) {
  155.             getList(domain + arr[1]);
  156.         }
  157.     }
  158.     function getContent(url) {
  159.         var str0, str, arr;
  160.         try {
  161.             str0 = getHtml(url);
  162.             str = str0.match(reC1)[0];
  163.         } catch (error) {
  164.             str = '';
  165.         }
  166.         if (!oCache[url]) {
  167.             while (arr = reContent.exec(str)) {
  168.                 arrOut.unshift((arr[1] + (undefined === arr[2] ? '' : arr[2])).replace(reReplace, ''));
  169.                 arrOut.unshift(arr[3].replace(reReplace, '') + '\r\n');
  170.                 try {
  171.                     ts.WriteLine(arrOut.join(''));
  172.                 } catch (error) {
  173.                 } finally {
  174.                     arrOut.shift();
  175.                     arrOut.shift();
  176.                 }
  177.             }
  178.             tsCache.WriteLine(url);
  179.         }
  180.         //nextpage?
  181.         if (arr = reNextPage.exec(str0)) {
  182.             getContent(domain + arr[1]);
  183.         }
  184.     }
  185.     function getContentOriginal(url) {
  186.         var str,
  187.             str0,
  188.             arr;
  189.         try {
  190.             str0 = getHtml(url);
  191.             str = str0.match(reC2)[0];
  192.         } catch (error) {
  193.             str = '';
  194.         }
  195.         if (!oCache[url]) {
  196.             while (arr = reContent.exec(str)) {
  197.                 // arrOut.unshift();
  198.                 try {
  199.                     ts.WriteLine(arr[3].replace(reReplaceOriginal, '') + '\r\n' + (arr[1] + (undefined === arr[2]) ? '' : arr[2]).replace(reReplaceOriginal, fnRp));
  200.                     ts.WriteBlankLines(1);
  201.                 } catch (error) {
  202.                     // showError(error, 'Writing to file ' + file + ' failed.');
  203.                     // throw error;
  204.                 }
  205.             }
  206.             tsCache.WriteLine(url);
  207.         }
  208.         //nextpage?
  209.         if (arr = reNextPage.exec(str0)) {
  210.             getContentOriginal(domain + arr[1]);
  211.         }
  212.     }
  213.     function getHtml(URL, cnt) {
  214.         cnt = cnt >>> 0;
  215.         WScript.Sleep(5000);//sleep 10s
  216.         xhr.open('GET', URL, false);
  217.         xhr.send();
  218.         if (200 === xhr.status) {
  219.             return xhr.responseText;
  220.         } else if (403 === xhr.status) {
  221.             WScript.Echo(URL + '\n403:网站拒绝下载服务,请更换IP地址后继续下载。');
  222.             if (cnt < 20) {
  223.                 return getHtml(URL, cnt + 1);
  224.             } else {
  225.                 ts.Close();
  226.                 tsCache.Close();
  227.                 WScript.Quit(403);
  228.             }
  229.         }
  230.         showError('fetch URI "' + URL + '" failed.\nstatus: ' + xhr.status);
  231.         return '';
  232.     }
  233.     function fnRp($0) {
  234.         var s = $0.toLowerCase();
  235.         return /<br\s*\/?>|<\/\s*br>/.test(s) ? '\r\n' : '';
  236.     }
  237.     function showError(err, source) {
  238.         WScript.Echo('[object Error]' === Object.prototype.toString.call(err) ?
  239.             [
  240.                 err.name,
  241.                 'source: ' + (undefined === source ? '' : source),
  242.                 'number: ' + (err.number >>> 0).toString(16),
  243.                 'equipment: ' + (err.number >> 16 & 0x1FFF),
  244.                 'code: ' + (err.number & 0xFFFF),
  245.                 'Information: ' + err.message
  246.             ].join('\n')
  247.             :
  248.             err);
  249.     }
  250. })('先秦', '汉朝', '魏晋', '南北朝', '隋唐五代', '宋朝', '元朝', '明朝', '清朝', '近现代', '美国名人', '英国', '法国', '德国', '日本', '俄罗斯', '希腊', '罗马', '意大利', '奥地利', '印度', '书籍名句', '电影台词', '小说摘抄', '散文美句', '动漫语录', '连续剧台词', '古文名句', '爱情', '读书', '励志', '时间', '友情', '诚信', '爱国', '激励', '勤奋', '奉献', '真理', '道德', '理想', '人生', '数学', '英语', '母爱', '劳动', '亲情', '创新', '团结', '童年', '感恩', '目标', '本周热门原创', '最新原创句子', '推荐原创句子');
复制代码

作者: lxh623    时间: 2018-10-1 11:00

回复 2# flashercs
第一个就停了。
然后,想把喜欢及其数字,抓到最前面,或者最后面。方便处理成一条。谢谢!国庆节快乐!
作者: flashercs    时间: 2018-10-1 12:33

访问多了那网站就不让访问了,403错误,服务器拒绝服务,请更换IP地址才行。
作者: lxh623    时间: 2018-10-1 14:50

回复 4# flashercs
作者: flashercs    时间: 2018-10-1 14:54

回复 5# lxh623


    你试试浏览器还能打开网站吗?
作者: flashercs    时间: 2018-10-1 17:46

本帖最后由 flashercs 于 2018-10-1 17:49 编辑

回复 5# lxh623


    短时间内大量访问被视为http攻击,人家https服务器拒绝服务,你必须更换IP地址。。。。。
代码已修改 已经添加了 喜欢(18960)
作者: lxh623    时间: 2018-10-2 08:13

不知道怎样减缓动作,让服务器不反感呢?谢谢!
作者: flashercs    时间: 2018-10-2 17:43

回复 8# lxh623


    延迟一定时间吧,比如每隔10s访问一次网站,就可能没事了,不过下载速度太慢了。。。。。
自己权衡吧。
作者: lxh623    时间: 2018-10-4 10:36

本帖最后由 lxh623 于 2018-10-4 10:42 编辑

回复 9# flashercs
脚本里面怎么设置时间?
同时加入清除cookie的功能,行不行?
只抓到一个作者,那么,可以把脚本再细化到作者,不然,每次只有“诗经”。
谢谢!
作者: flashercs    时间: 2018-10-4 15:27

回复 10# lxh623


    可以了下很多了 修改了一下
作者: lxh623    时间: 2018-10-7 08:06

这个网站太厉害,隔了一天都打不开。
作者: Batcher    时间: 2018-10-13 16:29

回复 12# lxh623


    找个代理切换器之类的吧




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2