[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
文本提取还有几天,之后,再来了结。谢谢!

TOP

本帖最后由 lxh623 于 2018-11-23 15:28 编辑

两位都在。新的问题是怎样下载百度搜索结果页面。这是以前我没有下载到的一个。
我想把文本a的每一行打开,搜索,结果数量从1-99,具体不知道。怎样全部下载百度结果的html,也不知道会不会重名。
类似网址:https://www.baidu.com/s?q1=《目送》&q2=&q3=&q4=&gpc=stf&ft=&q5=&q6=www.juzimi.com&tn=baiduadv

以后,我准备提取含有writer或者article的链接的缓存。再去下载。当然,直接提取这样的网址或者下载这样的快照页面更好了。
还是20 。谢谢!

TOP

看不大懂说的意思. 假装看懂了....我语文从来不及格的...
假设当前目录是E:\abc ,分类子目录有 0 ,1 ,2 ,3 ...
flashercs 发表于 2018-11-23 12:54

分别合成一个文本。谢谢!
还没有下载完。

TOP

本帖最后由 WHY 于 2018-12-4 23:45 编辑

假设从 http://www.52shici.com 下载的 html 存放在 E:\52shici 目录下。
也是分两个脚本,52shici.bat 和 52shici.PS1,两个脚本存放在同一文件夹下,双击 bat 文件运行。

52shici.bat
  1. @echo off
  2. set "htmlPath=E:\52shici"
  3. dir /b /s "%htmlPath%\*.html" > List.txt
  4. PowerShell -exec ByPass -f "52shici.PS1" List.txt
  5. del List.txt
  6. pause
复制代码
52shici.PS1
  1. param([String]$ListFile);
  2. $stream = New-Object IO.StreamWriter('52shici.Log', $True, [Text.Encoding]::UTF8);
  3. $reg1 = [regex]'<em>([^<>]*)</em>\s*<span class="author">([^<>]*)</span>';
  4. $reg2 = [regex]'<div class="works-content"[\s\S]*被阅读过\s*\d+\s*次';
  5. forEach ($file In (type $ListFile -ReadCount 0)) {
  6.     $str = [IO.File]::ReadAllText($file, [Text.Encoding]::UTF8);
  7.     $m1  = $reg1.Match($str);
  8.     $m2  = $reg2.Match($str);
  9.     If ($m1.Success -and $m2.Success) {
  10.         $s = 'TTT' + $m1.Groups[1].Value + $m1.Groups[2].Value + "`r`n";
  11.         $s += $m2.Groups[0].Value;;
  12.         $s = $s -replace '(?<!\r)\n', '\r\n';
  13.         $s = $s -replace '&nbsp;|<(?!br)[^>]*>';
  14.         $s = $s -replace '(?m)^\s+';
  15.         $stream.WriteLine($s + "`r`n");
  16.         If (++$n % 6000 -eq 0) { $stream.Flush(); }
  17.     }
  18. }
  19. $stream.Close();
复制代码

TOP

本帖最后由 WHY 于 2018-11-26 21:09 编辑

回复 11# lxh623


    假设从 http://www.zgshige.com 下载的 html 存放在 E:\zgshige 目录下。
分两个脚本,zgshige.bat 和 zgshige.PS1,两个脚本存放在同一目录下,双击 bat 文件运行。

zgshige.bat
  1. @echo off
  2. set "htmlPath=E:\zgshige"
  3. dir /b /s "%htmlPath%\*.html" > List.txt
  4. PowerShell -exec ByPass -f "zgshige.PS1" List.txt
  5. del List.txt
  6. pause
复制代码
zgshige.PS1
  1. param([String]$ListFile);
  2. $stream = New-Object IO.StreamWriter('zgshige.Log', $True, [Text.Encoding]::UTF8);
  3. forEach ($file In (type $ListFile -ReadCount 0)) {
  4.     $str = [IO.File]::ReadAllText($file, [Text.Encoding]::UTF8);
  5.     $arr = $str -split '<!--\s*诗歌正文(?:开始|结束)\s*-->';
  6.     If ($arr.Count -eq 3) {
  7.         $s = $arr[1] -replace '<h3>(?!TTT)', '$&TTT';
  8.         $s = $s -replace '(?<!\r)\n', "`r`n";
  9.         $s = $s -replace '&nbsp;|<(?!br)[^>]*>';
  10.         $s = $s -replace '(?m)^\s+';
  11.         $stream.WriteLine($s + "`r`n");
  12.         If (++$n % 6000 -eq 0) { $stream.Flush(); }
  13.     }
  14. }
  15. $stream.Close();
复制代码

TOP

本帖最后由 flashercs 于 2018-12-6 22:28 编辑

提取zgshige.bat
  1. @echo off
  2. REM 设置htmlRoot = zgshige的html文件根目录
  3. set "htmlRoot=E:\PowerShell\WebHttpRequest\zgshige\htmlsrc"
  4. REM 设置txtFilePath = 提取的文本文件名
  5. set "txtFilePath=提取zgshige.txt"
  6. for /f "tokens=1 delims=:" %%A in ('findstr /n "#######*" %0') do more +%%A %0 >"%~dpn0.ps1"
  7. powershell.exe -ExecutionPolicy Bypass -File "%~dpn0.ps1" "%htmlRoot%" "%~dp0%txtFilePath%"
  8. pause
  9. exit /b
  10. ################################################################
  11. param([string]$htmlRoot, [string]$txtFilePath)
  12. $sw = [System.IO.StreamWriter]::new($txtFilePath, $true, [System.Text.Encoding]::Unicode)
  13. $sw.AutoFlush = $true
  14. # [string]$scriptPath = [System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Defination)
  15. $htmldoc = New-Object -ComObject htmlfile
  16. $null = $htmldoc.IHTMLDocument2_open()
  17. $htmldoc.IHTMLDocument2_write('<!DOCTYPE html><html><head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>Page Title</title><meta name="viewport" content="width=device-width, initial-scale=1"></head><body></body></html>')
  18. $htmldoc.IHTMLDocument2_close()
  19. [System.IO.Directory]::GetFiles($htmlRoot, '*.html', [System.IO.SearchOption]::AllDirectories)|ForEach-Object {
  20.     $m = [System.IO.File]::ReadAllText($_, [System.Text.Encoding]::UTF8) -match '(?<=<!-- 诗歌正文开始 -->)[\s\S]+(?=<!-- 诗歌正文结束 -->)'
  21.     if ($m) {
  22.         Write-Host "提取$_" -ForegroundColor Green
  23.         try {
  24.             $htmldoc.body.innerHTML = $Matches[0]
  25.             $title = 'TTT ' + $htmldoc.body.getElementsByTagName('h3')[0].innerText
  26.             $author = $htmldoc.body.children[1].children[0].children[0].innerText
  27.             $content = $htmldoc.body.getElementsByClassName('m-lg font14')[0].innerText
  28.             $sw.WriteLine((($title + "`r`n" + $author + "`r`n" + $content + "`r`n") -replace "\r?\n\s*", "<br/>`r`n"))
  29.         }
  30.         catch {
  31.                
  32.         }
  33.     }
  34. }
  35. Remove-Variable -Name htmldoc
  36. $sw.Close()
复制代码

TOP

本帖最后由 flashercs 于 2018-12-6 22:27 编辑

先设置52shici.html的根目录路径;
保存 提取52shici_Works.bat
  1. @echo off
  2. REM 设置htmlRoot = 52shici的html文件根目录
  3. set "htmlRoot=E:\PowerShell\WebHttpRequest\52shici\html"
  4. REM 设置txtFilePath = 提取的文本文件名,放在脚本同目录下
  5. set "txtFilePath=提取52shici.txt"
  6. for /f "tokens=1 delims=:" %%A in ('findstr /n "#######*" %0') do more +%%A %0 >"%~dpn0.ps1"
  7. powershell.exe -ExecutionPolicy Bypass -File "%~dpn0.ps1" "%htmlRoot%" "%~dp0%txtFilePath%"
  8. pause
  9. exit /b
  10. ################################################################
  11. param([string]$htmlRoot, [string]$txtFilePath)
  12. $sw = [System.IO.StreamWriter]::new($txtFilePath, $true, [System.Text.Encoding]::Unicode)
  13. $sw.AutoFlush = $true
  14. # [string]$scriptPath = [System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Defination)
  15. $htmldoc = New-Object -ComObject htmlfile
  16. $null = $htmldoc.IHTMLDocument2_open()
  17. $htmldoc.IHTMLDocument2_write('<!DOCTYPE html><html><head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>Page Title</title><meta name="viewport" content="width=device-width, initial-scale=1"></head><body></body></html>')
  18. $htmldoc.IHTMLDocument2_close()
  19. [System.IO.Directory]::GetFiles($htmlRoot, '*.html', [System.IO.SearchOption]::AllDirectories)|ForEach-Object {
  20.     $m = [System.IO.File]::ReadAllText($_, [System.Text.Encoding]::UTF8) -match '<div class="main"[\s\S]+(?=<!--main end -->)'
  21.     if ($m) {
  22.         Write-Host "提取$_" -ForegroundColor Green
  23.         try {
  24.             $htmldoc.body.innerHTML = $Matches[0]
  25.             $div = $htmldoc.body.firstChild
  26.             $nodeh1 = $div.getElementsByClassName('works-h1')[0]
  27.             $title = 'TTT ' + $nodeh1.children[0].innerText
  28.             $author = $nodeh1.children[1].innerText
  29.             $content = $div.getElementsByClassName('works-content')[0].innerText
  30.             $sw.WriteLine((($title + "`r`n" + $author + "`r`n" + $content + "`r`n") -replace "`r?`n\s*", "<br/>`r`n"))
  31.         }
  32.         catch {
  33.                
  34.         }
  35.     }
  36. }
  37. Remove-Variable -Name htmldoc
  38. $sw.Close()
复制代码

TOP

另一个问题是,怎样从本地以日子或类别命名的文件夹,一次性提取一个txt。要求还是标题加TTT 。
下载到本地的html,可以检查是否缺页。
一个15元。谢谢!

TOP

楼主是win7吗?powershell 是2.0 版本?
下载第一个网站的
保存为zgshige.bat
flashercs 发表于 2018-11-19 14:40

这个第10行的数字不像以前一个可以修改吧?谢谢!

TOP

52shici还有两个内容 works 和 posts 开始搞错了都......也不知要哪个?都弄上吧.
52shiciWorks.bat
  1. 0<1/*,:
  2. @echo off
  3. CScript.exe -nologo -e:jscript %0
  4. pause
  5. exit /b
  6. */;
  7. (function () {
  8.     var xhr = (function () {
  9.         var aXMLHttpVers = ['MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
  10.         for (var i = 0; i < aXMLHttpVers.length; i++) {
  11.             try {
  12.                 return new ActiveXObject(aXMLHttpVers[i]);
  13.             } catch (error) { }
  14.         }
  15.         showError('Can\'t build XMLHTTP automation object.');
  16.         WScript.Quit(1);
  17.     })(),
  18.         fso = new ActiveXObject('Scripting.FileSystemObject'),
  19.         htmldoc = new ActiveXObject('htmlfile'),
  20.         domain = "http://www.52shici.com",
  21.         outFile = "52shici_works.txt",
  22.         cacheFile = "cache_52shici_works.txt",
  23.         tsOut,
  24.         tsCache,
  25.         oCache = {},
  26.         url,
  27.         reCrLfS = /\r?\n */g,
  28.         i,
  29.         l,
  30.         aIndex = [];
  31.     new ActiveXObject('WScript.Shell').CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName);
  32.     try {
  33.         tsCache = fso.OpenTextFile(cacheFile, 1, true);
  34.     } catch (e) {
  35.         showError('can not read cache file ' + cacheFile);
  36.         WScript.Quit(1);
  37.     }
  38.     while (!tsCache.AtEndOfStream) {
  39.         oCache[tsCache.ReadLine()] = true;
  40.     }
  41.     tsCache.Close();
  42.     try {
  43.         tsCache = fso.OpenTextFile(cacheFile, 8, true);
  44.     } catch (e) {
  45.         showError(e, 'can not write cache file ' + cacheFile);
  46.         WScript.Quit(2);
  47.     }
  48.     try {
  49.         tsOut = fso.OpenTextFile(outFile, 8, true, -1);//unicode encoding
  50.     } catch (e) {
  51.         showError(e, 'can not write file ' + outFile);
  52.         WScript.Quit(3);
  53.     }
  54.     // main
  55.     for (var type = 0; type <= 19; ++type) {
  56.         var url = 'http://www.52shici.com/original.php?type=' + type + '&page=';
  57.         var totalPages;
  58.         if (!getHTMLindex(url + 1, true)) continue;
  59.         var body = htmldoc.body;
  60.         totalPgs = body.lastChild.innerText.match(/当前\d+\/(\d+)页/)[1];
  61.         WSH.Echo('totalpages=' + totalPgs);
  62.         for (var m = 1; m <= totalPgs; ++m) {
  63.             if (oCache[url + m] || !getHTMLindex(url + m)) continue;
  64.             body = htmldoc.body;
  65.             var aList = body.getElementsByTagName('a');
  66.             aIndex.length = 0;
  67.             for (i = 0, l = aList.length; i < l; ++i) {
  68.                 aIndex.push(parseURL(aList[i].getAttribute('href'), url));
  69.             }
  70.             for (i = 0, l = aIndex.length; i < l; ++i) {
  71.                 getContent(aIndex[i]);
  72.             }
  73.             tsCache.WriteLine(url + m);
  74.         }
  75.     }
  76.     tsOut.close();
  77.     tsCache.close();
  78.     WScript.Quit();
  79.     function getContent(url) {
  80.         if (oCache[url] || !getHTML(url)) return;
  81.         var main = htmldoc.body.children[0];
  82.         var nodes = main.children;
  83.         try {
  84.             for (var i = 0, l = nodes.length; i < l; ++i) {
  85.                 var item = nodes[i];
  86.                 switch (item.className) {
  87.                     case 'works-h1':
  88.                         var title = 'TTT ' + item.children[0].innerText;
  89.                         // WSH.Echo( 'title: '+title);
  90.                         var author = item.children[1].innerText.replace('文/', '作者:');
  91.                         // WSH.Echo( 'author: '+author);
  92.                         break;
  93.                     case 'works-content':
  94.                         var content = item.innerText;
  95.                         i = l;
  96.                         break;
  97.                     default:
  98.                         break;
  99.                 }
  100.             }
  101.             tsOut.WriteLine((title + '\r\n' + author + '\r\n' + content).replace(reCrLfS, '<br/>\r\n'));
  102.             tsCache.WriteLine(url);
  103.         } catch (e) {
  104.             showError(e);
  105.         }
  106.     }
  107.     function showError(err, source) {
  108.         WScript.StdOut.WriteLine('[object Error]' === Object.prototype.toString.call(err) ?
  109.             [
  110.                 err.name,
  111.                 'source: ' + (undefined === source ? '' : source),
  112.                 'number: ' + (err.number >>> 0).toString(16),
  113.                 'Information: ' + err.message
  114.             ].join('\r\n')
  115.             :
  116.             err);
  117.     }
  118.     function getHTMLindex(url, boltotalPages) {
  119.         WScript.StdOut.Write('fetching ' + url + '...')
  120.         xhr.open('GET', url, false);
  121.         xhr.setRequestHeader('Accept', 'text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8');
  122.         xhr.setRequestHeader('Accept-Language', 'en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3');
  123.         xhr.setRequestHeader('host', 'www.52shici.com/');
  124.         xhr.setRequestHeader('Connection', 'close');
  125.         xhr.setRequestHeader('Cache-Control', 'no-cache');
  126.         xhr.setRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134');
  127.         try {
  128.             xhr.send();
  129.             // WSH.Echo(xhr.responseText.match(/<span[^>]*class=['"]mt['"][^>]*>[^<]*<\/span>/i)[0]);
  130.             // WSH.Quit();
  131.             if (200 === xhr.status) {
  132.                 htmldoc.open();
  133.                 htmldoc.write('<!DOCTYPE html><html><head></head><body>' + xhr.responseText.match(/<ul[^>]*id="listWorks"[^>]*>[\s\S]*?<\/ul>/i)[0] + (boltotalPages ? xhr.responseText.match(/<span[^>]*class=['"]mt['"][^>]*>[^<]*<\/span>/i)[0] : '') + '</body></html>');
  134.             } else {
  135.                 WScript.StdOut.WriteLine('failed. status:' + xhr.status);
  136.                 return false
  137.             }
  138.         } catch (e) {
  139.             WScript.StdOut.WriteLine('failed');
  140.             return false;
  141.         } finally {
  142.             htmldoc.close();
  143.         }
  144.         WScript.StdOut.WriteLine('success');
  145.         return true;
  146.     }
  147.     function getHTML(url) {
  148.         WScript.StdOut.Write('fetching ' + url + '...')
  149.         xhr.open('GET', url, false);
  150.         xhr.setRequestHeader('Accept', 'text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8');
  151.         xhr.setRequestHeader('Accept-Language', 'en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3');
  152.         xhr.setRequestHeader('host', 'www.52shici.com/');
  153.         xhr.setRequestHeader('Connection', 'close');
  154.         xhr.setRequestHeader('Cache-Control', 'no-cache');
  155.         xhr.setRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134');
  156.         try {
  157.             xhr.send();
  158.             if (200 === xhr.status) {
  159.                 htmldoc.open();
  160.                 var aTxt = xhr.responseText.match(/<div class="main"[\s\S]+(?=<!--main end -->)/i);
  161.                 htmldoc.write('<!DOCTYPE html><html><head></head><body>' + aTxt[0] + '</body></html>');
  162.             } else {
  163.                 WScript.StdOut.WriteLine('failed. status:' + xhr.status);
  164.                 return false
  165.             }
  166.         } catch (e) {
  167.             WScript.StdOut.WriteLine('failed');
  168.             return false;
  169.         } finally {
  170.             htmldoc.close();
  171.         }
  172.         WScript.StdOut.WriteLine('success');
  173.         return true;
  174.     }
  175.     function parseURL(href, url) {
  176.         var $path = href.replace(/^[^:]*:/, '');
  177.         if (/^\/\/.*/.test($path)) {
  178.             return href;
  179.         } else if (/^\/.*/.test($path)) {
  180.             return domain + $path;
  181.         } else {
  182.             return url.replace(/[^\/]+$/, '') + $path;
  183.         }
  184.     }
  185. })();
复制代码
52shiciPosts.bat
  1. 0<1/*,:
  2. @echo off
  3. CScript.exe -nologo -e:jscript %0
  4. pause
  5. exit /b
  6. */;
  7. (function () {
  8.     var xhr = (function () {
  9.         var aXMLHttpVers = ['MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
  10.         for (var i = 0; i < aXMLHttpVers.length; i++) {
  11.             try {
  12.                 return new ActiveXObject(aXMLHttpVers[i]);
  13.             } catch (error) { }
  14.         }
  15.         showError('Can\'t build XMLHTTP automation object.');
  16.         WScript.Quit(1);
  17.     })(),
  18.         fso = new ActiveXObject('Scripting.FileSystemObject'),
  19.         htmldoc = new ActiveXObject('htmlfile'),
  20.         domain = "http://www.52shici.com",
  21.         outFile = "52shici_posts.txt",
  22.         cacheFile = "cache_52shici_posts.txt",
  23.         tsOut,
  24.         tsCache,
  25.         oCache = {},
  26.         url,
  27.         reCrLfS = /\r?\n */g,
  28.         i,
  29.         l = 300000,
  30.         strOut,
  31.         nodeContent,
  32.         sTitle,
  33.         sAuthor,
  34.         sContent;
  35.     new ActiveXObject('WScript.Shell').CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName);
  36.     try {
  37.         tsCache = fso.OpenTextFile(cacheFile, 1, true);
  38.     } catch (e) {
  39.         showError('can not read cache file ' + cacheFile);
  40.         WScript.Quit(1);
  41.     }
  42.     while (!tsCache.AtEndOfStream) {
  43.         oCache[tsCache.ReadLine()] = true;
  44.     }
  45.     tsCache.Close();
  46.     try {
  47.         tsCache = fso.OpenTextFile(cacheFile, 8, true);
  48.     } catch (e) {
  49.         showError(e, 'can not write cache file ' + cacheFile);
  50.         WScript.Quit(2);
  51.     }
  52.     try {
  53.         tsOut = fso.OpenTextFile(outFile, 8, true, -1);//unicode encoding
  54.     } catch (e) {
  55.         showError(e, 'can not write file ' + outFile);
  56.         WScript.Quit(3);
  57.     }
  58.     // main
  59.     for (i = 1; i < l; ++i) {
  60.         if (oCache['' + i]) continue;
  61.         url = 'http://www.52shici.com/posts.php?id=' + i;
  62.         if (!getHTML(url)) continue;
  63.         var node = htmldoc.documentElement.childNodes[1].childNodes[0];
  64.         try {
  65.             for (var m = 0, n = node.childNodes.length; m < n; ++m) {
  66.                 var item = node.childNodes[m];
  67.                 switch (item.className) {
  68.                     case 'posts-h1':
  69.                         sTitle = 'TTT ' + item.innerText;
  70.                         break;
  71.                     case 'posts-h2':
  72.                         sAuthor = '作者:' + item.firstChild.innerText;
  73.                         break;
  74.                     case 'posts-content':
  75.                         item.removeChild(item.lastChild);
  76.                         sContent = item.innerText;
  77.                         break;
  78.                     default:
  79.                         break;
  80.                 }
  81.             }
  82.             strOut = sTitle + '\r\n' + sAuthor + '\r\n' + sContent;
  83.             tsOut.WriteLine(strOut.replace(reCrLfS, '<br/>\r\n'));
  84.             tsCache.WriteLine(i);
  85.         } catch (e) {
  86.             continue;
  87.         }
  88.     }
  89.     tsOut.close();
  90.     tsCache.close();
  91.     WScript.Quit();
  92.     function showError(err, source) {
  93.         WScript.StdOut.WriteLine('[object Error]' === Object.prototype.toString.call(err) ?
  94.             [
  95.                 err.name,
  96.                 'source: ' + (undefined === source ? '' : source),
  97.                 'number: ' + (err.number >>> 0).toString(16),
  98.                 'Information: ' + err.message
  99.             ].join('\r\n')
  100.             :
  101.             err);
  102.     }
  103.     function getHTML(url) {
  104.         WScript.StdOut.Write('fetching ' + url + '...')
  105.         xhr.open('GET', url, false);
  106.         xhr.setRequestHeader('Accept', 'text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8');
  107.         xhr.setRequestHeader('Accept-Language', 'en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3');
  108.         xhr.setRequestHeader('host', 'www.52shici.com/');
  109.         xhr.setRequestHeader('Connection', 'close');
  110.         xhr.setRequestHeader('Cache-Control', 'no-cache');
  111.         xhr.setRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134');
  112.         try {
  113.             xhr.send();
  114.             if (200 === xhr.status) {
  115.                 htmldoc.open();
  116.                 var aTxt = xhr.responseText.match(/<div class="sidebar"[\s\S]+(?=<div class="posts-do")/i);
  117.                 if (!aTxt) throw false;
  118.                 htmldoc.write('<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=GB2312" /></head><body>' + aTxt[0] + '</div></body></html>');
  119.             } else {
  120.                 WScript.StdOut.WriteLine('failed. status:' + xhr.status);
  121.                 return false
  122.             }
  123.         } catch (e) {
  124.             WScript.StdOut.WriteLine('failed');
  125.             return false;
  126.         } finally {
  127.             htmldoc.close();
  128.         }
  129.         WScript.StdOut.WriteLine('success');
  130.         return true;
  131.     }
  132. })();
复制代码
1

评分人数

TOP

windows8,下周windows10 。谢谢!

TOP

本帖最后由 WHY 于 2018-11-20 19:29 编辑

下载 http://www.zgshige.com 网页,与楼上一样,也分三个脚本,第1个脚本 startScript.bat 和第2个脚本 startScript.ps1 内容与楼上相同,三个脚本存放在同一目录下。
第 3 个脚本 DownLoadURL.PS1 如下,双击 startScript.bat 运行。
  1. param([int]$StartIndex, [int]$EndIndex);
  2. $path = 'E:\zgshige\';      #html文件保存路径
  3. $web = New-Object System.Net.WebClient;
  4. $web.Encoding = [Text.Encoding]::UTF8;
  5. for ($i=$StartIndex; $i -le $EndIndex; $i++) {
  6.     $url = 'http://www.zgshige.com/zcms/catalog/15112/pc/index_' + $i + '.shtml';
  7.     $str = $web.DownloadString($url);
  8.     forEach ($m In [regex]::Matches($str, '(?i)<a class="fc-green text-uppercase" href="(http[^"]*)"')) {
  9.         $var = $m.Groups[1].Value;
  10.         $fd  = $path + ($var -replace '.*/([^/]+)/[^/]+$', '$1');
  11.         If (!(Test-Path $fd)) { $null = md $fd; }
  12.         $name = $var -replace '.*/([^/]+)\.s?html$', '$1';
  13.         $s = $web.DownloadString($var);
  14.         $s = $s -replace '<h3>(?!TTT)', '$&TTT';
  15.         sc -Path ($fd + '\' + $name + '.html') -Value $s -Enc UTF8;
  16.     }
  17. }
复制代码
改一下正则,提高点速度。
1

评分人数

TOP

本帖最后由 WHY 于 2018-11-19 20:19 编辑

分三个脚本,第1个脚本 startScript.bat,第 2 个脚本 startScript.ps1,第 3 个脚本 DownLoadURL.PS1,三个脚本存放在同一目录。
双击 startScript.bat 运行。

startScript.bat
  1. @echo off
  2. echo;Wait ...
  3. PowerShell -exec ByPass -f "startScript.ps1"
  4. echo;Done
  5. pause
复制代码
startScript.ps1
修改  startScript.ps1 第11行变量 $i 的取值范围,这里是从第一页到第100页
  1. $SessionState = [System.Management.Automation.Runspaces.InitialSessionState]::CreateDefault();
  2. $Pool = [RunspaceFactory]::CreateRunspacePool(1, 5, $SessionState, $Host);
  3. $Pool.Open();
  4. $ScriptBlock = {
  5.     param([int]$StartIndex, [int]$EndIndex)
  6.     PowerShell -exec ByPass -f "DownLoadURL.ps1" -StartIndex $StartIndex -EndIndex $EndIndex;
  7. }
  8. $Jobs = @(); $Step = 4;
  9. for ($i = 1; $i -le 100; $i+=$Step) {
  10.     $Start = $i;
  11.     $End = $i + $step - 1;
  12.     $PowerShell = [PowerShell]::Create().AddScript($ScriptBlock).AddArgument($Start).AddArgument($End);
  13.     $PowerShell.RunspacePool = $Pool;
  14.     $Jobs += $PowerShell.BeginInvoke();
  15. }
  16. while (!$ok) {
  17.     $ok = $True;
  18.     ForEach ($Job In $Jobs) { If (!$Job.IsCompleted) {$ok = $False} }
  19.     sleep -Milliseconds 200
  20. }
复制代码
DownLoadURL.PS1
修改 DownLoadURL.PS1 第 6 行 $type 的值,可以取值从 1~19
  1. param([int]$StartIndex, [int]$EndIndex);
  2. $path = 'E:\52shici\';      #html文件保存路径
  3. $web = New-Object System.Net.WebClient;
  4. $web.Encoding = [Text.Encoding]::UTF8;
  5. $type = 1;
  6. $fd  = $path + $type;
  7. If (!(Test-Path $fd)) { $null = md $fd; }
  8. for ($i=$StartIndex; $i -le $EndIndex; $i++) {
  9.     $url = 'http://www.52shici.com/original.php?type=' + $type + '&page=' + $i;
  10.     $str = $web.DownloadString($url);
  11.     forEach ($m In [regex]::Matches($str, '<li><span class="l"><a\s+target="_blank" href="([^"]*)"')) {
  12.         $var = 'http://www.52shici.com/' + $m.Groups[1].Value;
  13.         $name = ($var -replace '.*\?');
  14.         $s = $web.DownloadString($var);
  15.         $s = $s -replace '(?<=<span class="author">)(.*?)文/', '$1作者 ';
  16.         sc -Path ($fd + '\' + $name + '.html') -Value $s -Enc UTF8;
  17.     }
  18. }
复制代码
1

评分人数

TOP

本帖最后由 flashercs 于 2018-11-26 18:53 编辑

楼主是win7吗?powershell 是2.0 版本?
下载第一个网站的
保存为zgshige.bat
  1. 0<1/*,:
  2. @echo off
  3. %windir%\system32\CScript.exe -nologo -e:jscript %0
  4. pause
  5. exit /b
  6. */;
  7. (function () {
  8.     var xhr = (function () {
  9.         var aXMLHttpVers = ['MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
  10.         for (var i = 0; i < aXMLHttpVers.length; i++) {
  11.             try {
  12.                 return new ActiveXObject(aXMLHttpVers[i]);
  13.             } catch (error) { }
  14.         }
  15.         showError('Can\'t build XMLHTTP automation object.');
  16.         WScript.Quit(1);
  17.     })(),
  18.         fso = new ActiveXObject('Scripting.FileSystemObject'),
  19.         htmldoc = new ActiveXObject('htmlfile'),
  20.         oADO = new ActiveXObject('ADODB.Stream'),
  21.         domain = "http://www.zgshige.com",
  22.         outFile = "shige.txt",
  23.         cacheFile = "cache.txt",
  24.         tsOut,
  25.         tsCache,
  26.         oCache = {},
  27.         url,
  28.         aIndex = [],
  29.         nextPage,
  30.         nodes,
  31.         reScriptNode = /<script[^>]*>[\s\S]*?<\/script>(?!['"'])/g,
  32.         i,
  33.         l;
  34.     oADO.Mode = 3;
  35.     new ActiveXObject('WScript.Shell').CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName);
  36.     try {
  37.         tsCache = fso.OpenTextFile(cacheFile, 1, true);
  38.     } catch (e) {
  39.         WScript.Echo('can not read cache file ' + cacheFile);
  40.         WScript.Quit(1);
  41.     }
  42.     while (!tsCache.AtEndOfStream) {
  43.         oCache[tsCache.ReadLine()] = true;
  44.     }
  45.     tsCache.Close();
  46.     try {
  47.         tsCache = fso.OpenTextFile(cacheFile, 8, true);
  48.     } catch (e) {
  49.         showError(e, 'can not write cache file ' + cacheFile);
  50.         WScript.Quit(2);
  51.     }
  52.     try {
  53.         tsOut = fso.OpenTextFile(outFile, 8, true, -1);//unicode encoding
  54.     } catch (e) {
  55.         showError(e, 'can not write file ' + outFile);
  56.         WScript.Quit(3);
  57.     }
  58.     // url可以自己设置起始下载位置;例如 url = 'http://www.zgshige.com/zcms/catalog/15112/pc/index_29937.shtml';
  59.     url = 'http://www.zgshige.com/sg/index.shtml';
  60.     while (url) {
  61.         if (!getHTML(url)) break;
  62.         aIndex.length = 0;
  63.         nodes = htmldoc.documentElement.getElementsByClassName('fc-green text-uppercase');
  64.         for (i = 0, l = nodes.length; i < l; ++i) {
  65.             aIndex.push(parseURL(nodes[i].getAttribute('href'), url));
  66.         }
  67.         nodes = htmldoc.documentElement.getElementsByClassName('fc_ch1');
  68.         for (nextPage = null, i = 0, l = nodes.length; i < l; ++i) {
  69.             if (nodes[i].firstChild.nodeValue === '下一页') {
  70.                 nextPage = parseURL(nodes[i].parentNode.getAttribute('href'), url);
  71.                 break;
  72.             }
  73.         }
  74.         // WScript.StdOut.WriteLine('aIndex.length=' + aIndex.length);
  75.         // WScript.StdOut.WriteLine('innerHTML=' + htmldoc.documentElement.childNodes[0].innerHTML);
  76.         for (i = 0, l = aIndex.length; i < l; ++i) {
  77.             url = aIndex[i];
  78.             if (oCache[url] || !getHTML(url)) continue;
  79.             try {
  80.                 tsOut.WriteLine(('TTT' + htmldoc.documentElement.getElementsByTagName('h3')[0].innerText + '\r\n' + htmldoc.documentElement.getElementsByClassName('m-lg font14')[0].innerText).replace(/\r?\n */g, '<br/>\r\n'));
  81.                 tsCache.WriteLine(url);
  82.             } catch (e) {
  83.             }
  84.         }
  85.         url = nextPage;
  86.     }
  87.     tsOut.close();
  88.     tsCache.close();
  89.     WScript.Quit();
  90.     function parseURL(href, url) {
  91.         var $path = href.replace(/^[^:]*:/, '');
  92.         if (/^\/\/.*/.test($path)) {
  93.             return href;
  94.         } else if (/^\/.*/.test($path)) {
  95.             return domain + $path;
  96.         } else {
  97.             return url.replace(/[^\/]+$/, '') + $path;
  98.         }
  99.     }
  100.     function showError(err, source) {
  101.         WScript.StdOut.WriteLine('[object Error]' === Object.prototype.toString.call(err) ?
  102.             [
  103.                 err.name,
  104.                 'source: ' + (undefined === source ? '' : source),
  105.                 'number: ' + (err.number >>> 0).toString(16),
  106.                 'Information: ' + err.message
  107.             ].join('\r\n')
  108.             :
  109.             err);
  110.     }
  111.     function getHTML(url) {
  112.         WScript.StdOut.Write('fetching ' + url + '...')
  113.         xhr.open('GET', url, false);
  114.         xhr.setRequestHeader('Accept', 'text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8');
  115.         xhr.setRequestHeader('Accept-Language', 'en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3');
  116.         xhr.setRequestHeader('Accept-Encoding', 'gzip, deflate');
  117.         xhr.setRequestHeader('TE', 'gzip, deflate');
  118.         xhr.setRequestHeader('Cache-Control', 'no-cache');
  119.         xhr.setRequestHeader('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134');
  120.         try {
  121.             xhr.send();
  122.             if (200 === xhr.status) {
  123.                 oADO.Type = 1;
  124.                 oADO.Open();
  125.                 oADO.Write(xhr.responseBody);
  126.                 oADO.Position = 0;
  127.                 oADO.Type = 2;
  128.                 oADO.Charset = 'utf-8';
  129.                 htmldoc.open();
  130.                 htmldoc.write(oADO.ReadText(-1).replace(reScriptNode, ''));
  131.             } else {
  132.                 WScript.StdOut.WriteLine('failed')
  133.                 return false
  134.             }
  135.         } catch (e) {
  136.             WScript.StdOut.WriteLine('failed')
  137.             return false;
  138.         } finally {
  139.             htmldoc.close();
  140.             oADO.Close();
  141.         }
  142.         WScript.StdOut.WriteLine('success')
  143.         return true;
  144.     }
  145. })();
复制代码
1

评分人数

    • lxh623: 真诚感谢!技术 + 1

TOP

你08年就注册了,难道这种简单问题自己都写不出代码吗?

TOP

返回列表