返回列表 发帖

[已解决]各20元求两个网站资料下载

本帖最后由 lxh623 于 2018-12-8 19:25 编辑

http://www.zgshige.com/sg/
这个有index。感觉比较醒目。
http://www.52shici.com/original.php?type=1
这个有20个栏目,右边上面两行。下面也是可以翻页。

标题前面加上TTT,第一个有“作者:”,第二个是不是把“文/”换成“作者:”(自己加工也行)。正文保持原来网页转行与隔行,就好了。

谢谢!!

你一次多出点儿,做个交互智能的。
1

评分人数

TOP

可以自己手动下载的,想着大侠的脚本舒服,不用太复杂的加工。
如果有热心朋友愿意帮忙,感激不尽。如果没有,就手动下载了。谢谢!

TOP

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

TOP

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

楼主是win7吗?powershell 是2.0 版本?
下载第一个网站的
保存为zgshige.bat
0<1/*,:
@echo off
%windir%\system32\CScript.exe -nologo -e:jscript %0
pause
exit /b
*/;
(function () {
    var xhr = (function () {
        var aXMLHttpVers = ['MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
        for (var i = 0; i < aXMLHttpVers.length; i++) {
            try {
                return new ActiveXObject(aXMLHttpVers[i]);
            } catch (error) { }
        }
        showError('Can\'t build XMLHTTP automation object.');
        WScript.Quit(1);
    })(),
        fso = new ActiveXObject('Scripting.FileSystemObject'),
        htmldoc = new ActiveXObject('htmlfile'),
        oADO = new ActiveXObject('ADODB.Stream'),
        domain = "http://www.zgshige.com",
        outFile = "shige.txt",
        cacheFile = "cache.txt",
        tsOut,
        tsCache,
        oCache = {},
        url,
        aIndex = [],
        nextPage,
        nodes,
        reScriptNode = /<script[^>]*>[\s\S]*?<\/script>(?!['"'])/g,
        i,
        l;
    oADO.Mode = 3;
    new ActiveXObject('WScript.Shell').CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName);
    try {
        tsCache = fso.OpenTextFile(cacheFile, 1, true);
    } catch (e) {
        WScript.Echo('can not read cache file ' + cacheFile);
        WScript.Quit(1);
    }
    while (!tsCache.AtEndOfStream) {
        oCache[tsCache.ReadLine()] = true;
    }
    tsCache.Close();
    try {
        tsCache = fso.OpenTextFile(cacheFile, 8, true);
    } catch (e) {
        showError(e, 'can not write cache file ' + cacheFile);
        WScript.Quit(2);
    }
    try {
        tsOut = fso.OpenTextFile(outFile, 8, true, -1);//unicode encoding
    } catch (e) {
        showError(e, 'can not write file ' + outFile);
        WScript.Quit(3);
    }
    // url可以自己设置起始下载位置;例如 url = 'http://www.zgshige.com/zcms/catalog/15112/pc/index_29937.shtml';
    url = 'http://www.zgshige.com/sg/index.shtml';
    while (url) {
        if (!getHTML(url)) break;
        aIndex.length = 0;
        nodes = htmldoc.documentElement.getElementsByClassName('fc-green text-uppercase');
        for (i = 0, l = nodes.length; i < l; ++i) {
            aIndex.push(parseURL(nodes[i].getAttribute('href'), url));
        }
        nodes = htmldoc.documentElement.getElementsByClassName('fc_ch1');
        for (nextPage = null, i = 0, l = nodes.length; i < l; ++i) {
            if (nodes[i].firstChild.nodeValue === '下一页') {
                nextPage = parseURL(nodes[i].parentNode.getAttribute('href'), url);
                break;
            }
        }
        // WScript.StdOut.WriteLine('aIndex.length=' + aIndex.length);
        // WScript.StdOut.WriteLine('innerHTML=' + htmldoc.documentElement.childNodes[0].innerHTML);
        for (i = 0, l = aIndex.length; i < l; ++i) {
            url = aIndex[i];
            if (oCache[url] || !getHTML(url)) continue;
            try {
                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'));
                tsCache.WriteLine(url);
            } catch (e) {
            }
        }
        url = nextPage;
    }
    tsOut.close();
    tsCache.close();
    WScript.Quit();
    function parseURL(href, url) {
        var $path = href.replace(/^[^:]*:/, '');
        if (/^\/\/.*/.test($path)) {
            return href;
        } else if (/^\/.*/.test($path)) {
            return domain + $path;
        } else {
            return url.replace(/[^\/]+$/, '') + $path;
        }
    }
    function showError(err, source) {
        WScript.StdOut.WriteLine('[object Error]' === Object.prototype.toString.call(err) ?
            [
                err.name,
                'source: ' + (undefined === source ? '' : source),
                'number: ' + (err.number >>> 0).toString(16),
                'Information: ' + err.message
            ].join('\r\n')
            :
            err);
    }
    function getHTML(url) {
        WScript.StdOut.Write('fetching ' + url + '...')
        xhr.open('GET', url, false);
        xhr.setRequestHeader('Accept', 'text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8');
        xhr.setRequestHeader('Accept-Language', 'en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3');
        xhr.setRequestHeader('Accept-Encoding', 'gzip, deflate');
        xhr.setRequestHeader('TE', 'gzip, deflate');
        xhr.setRequestHeader('Cache-Control', 'no-cache');
        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');
        try {
            xhr.send();
            if (200 === xhr.status) {
                oADO.Type = 1;
                oADO.Open();
                oADO.Write(xhr.responseBody);
                oADO.Position = 0;
                oADO.Type = 2;
                oADO.Charset = 'utf-8';
                htmldoc.open();
                htmldoc.write(oADO.ReadText(-1).replace(reScriptNode, ''));
            } else {
                WScript.StdOut.WriteLine('failed')
                return false
            }
        } catch (e) {
            WScript.StdOut.WriteLine('failed')
            return false;
        } finally {
            htmldoc.close();
            oADO.Close();
        }
        WScript.StdOut.WriteLine('success')
        return true;
    }
})();COPY
1

评分人数

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

TOP

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

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

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

评分人数

TOP

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

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

评分人数

TOP

windows8,下周windows10 。谢谢!

TOP

52shici还有两个内容 works 和 posts 开始搞错了都......也不知要哪个?都弄上吧.
52shiciWorks.bat
0<1/*,:
@echo off
CScript.exe -nologo -e:jscript %0
pause
exit /b
*/;
(function () {
    var xhr = (function () {
        var aXMLHttpVers = ['MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
        for (var i = 0; i < aXMLHttpVers.length; i++) {
            try {
                return new ActiveXObject(aXMLHttpVers[i]);
            } catch (error) { }
        }
        showError('Can\'t build XMLHTTP automation object.');
        WScript.Quit(1);
    })(),
        fso = new ActiveXObject('Scripting.FileSystemObject'),
        htmldoc = new ActiveXObject('htmlfile'),
        domain = "http://www.52shici.com",
        outFile = "52shici_works.txt",
        cacheFile = "cache_52shici_works.txt",
        tsOut,
        tsCache,
        oCache = {},
        url,
        reCrLfS = /\r?\n */g,
        i,
        l,
        aIndex = [];
    new ActiveXObject('WScript.Shell').CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName);
    try {
        tsCache = fso.OpenTextFile(cacheFile, 1, true);
    } catch (e) {
        showError('can not read cache file ' + cacheFile);
        WScript.Quit(1);
    }
    while (!tsCache.AtEndOfStream) {
        oCache[tsCache.ReadLine()] = true;
    }
    tsCache.Close();
    try {
        tsCache = fso.OpenTextFile(cacheFile, 8, true);
    } catch (e) {
        showError(e, 'can not write cache file ' + cacheFile);
        WScript.Quit(2);
    }
    try {
        tsOut = fso.OpenTextFile(outFile, 8, true, -1);//unicode encoding
    } catch (e) {
        showError(e, 'can not write file ' + outFile);
        WScript.Quit(3);
    }
    // main
    for (var type = 0; type <= 19; ++type) {
        var url = 'http://www.52shici.com/original.php?type=' + type + '&page=';
        var totalPages;
        if (!getHTMLindex(url + 1, true)) continue;
        var body = htmldoc.body;
        totalPgs = body.lastChild.innerText.match(/当前\d+\/(\d+)页/)[1];
        WSH.Echo('totalpages=' + totalPgs);
        for (var m = 1; m <= totalPgs; ++m) {
            if (oCache[url + m] || !getHTMLindex(url + m)) continue;
            body = htmldoc.body;
            var aList = body.getElementsByTagName('a');
            aIndex.length = 0;
            for (i = 0, l = aList.length; i < l; ++i) {
                aIndex.push(parseURL(aList[i].getAttribute('href'), url));
            }
            for (i = 0, l = aIndex.length; i < l; ++i) {
                getContent(aIndex[i]);
            }
            tsCache.WriteLine(url + m);
        }
    }
    tsOut.close();
    tsCache.close();
    WScript.Quit();
    function getContent(url) {
        if (oCache[url] || !getHTML(url)) return;
        var main = htmldoc.body.children[0];
        var nodes = main.children;
        try {
            for (var i = 0, l = nodes.length; i < l; ++i) {
                var item = nodes[i];
                switch (item.className) {
                    case 'works-h1':
                        var title = 'TTT ' + item.children[0].innerText;
                        // WSH.Echo( 'title: '+title);
                        var author = item.children[1].innerText.replace('文/', '作者:');
                        // WSH.Echo( 'author: '+author);
                        break;
                    case 'works-content':
                        var content = item.innerText;
                        i = l;
                        break;
                    default:
                        break;
                }
            }
            tsOut.WriteLine((title + '\r\n' + author + '\r\n' + content).replace(reCrLfS, '<br/>\r\n'));
            tsCache.WriteLine(url);
        } catch (e) {
            showError(e);
        }
    }
    function showError(err, source) {
        WScript.StdOut.WriteLine('[object Error]' === Object.prototype.toString.call(err) ?
            [
                err.name,
                'source: ' + (undefined === source ? '' : source),
                'number: ' + (err.number >>> 0).toString(16),
                'Information: ' + err.message
            ].join('\r\n')
            :
            err);
    }
    function getHTMLindex(url, boltotalPages) {
        WScript.StdOut.Write('fetching ' + url + '...')
        xhr.open('GET', url, false);
        xhr.setRequestHeader('Accept', 'text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8');
        xhr.setRequestHeader('Accept-Language', 'en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3');
        xhr.setRequestHeader('host', 'www.52shici.com/');
        xhr.setRequestHeader('Connection', 'close');
        xhr.setRequestHeader('Cache-Control', 'no-cache');
        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');
        try {
            xhr.send();
            // WSH.Echo(xhr.responseText.match(/<span[^>]*class=['"]mt['"][^>]*>[^<]*<\/span>/i)[0]);
            // WSH.Quit();
            if (200 === xhr.status) {
                htmldoc.open();
                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>');
            } else {
                WScript.StdOut.WriteLine('failed. status:' + xhr.status);
                return false
            }
        } catch (e) {
            WScript.StdOut.WriteLine('failed');
            return false;
        } finally {
            htmldoc.close();
        }
        WScript.StdOut.WriteLine('success');
        return true;
    }
    function getHTML(url) {
        WScript.StdOut.Write('fetching ' + url + '...')
        xhr.open('GET', url, false);
        xhr.setRequestHeader('Accept', 'text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8');
        xhr.setRequestHeader('Accept-Language', 'en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3');
        xhr.setRequestHeader('host', 'www.52shici.com/');
        xhr.setRequestHeader('Connection', 'close');
        xhr.setRequestHeader('Cache-Control', 'no-cache');
        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');
        try {
            xhr.send();
            if (200 === xhr.status) {
                htmldoc.open();
                var aTxt = xhr.responseText.match(/<div class="main"[\s\S]+(?=<!--main end -->)/i);
                htmldoc.write('<!DOCTYPE html><html><head></head><body>' + aTxt[0] + '</body></html>');
            } else {
                WScript.StdOut.WriteLine('failed. status:' + xhr.status);
                return false
            }
        } catch (e) {
            WScript.StdOut.WriteLine('failed');
            return false;
        } finally {
            htmldoc.close();
        }
        WScript.StdOut.WriteLine('success');
        return true;
    }
    function parseURL(href, url) {
        var $path = href.replace(/^[^:]*:/, '');
        if (/^\/\/.*/.test($path)) {
            return href;
        } else if (/^\/.*/.test($path)) {
            return domain + $path;
        } else {
            return url.replace(/[^\/]+$/, '') + $path;
        }
    }
})();COPY
52shiciPosts.bat
0<1/*,:
@echo off
CScript.exe -nologo -e:jscript %0
pause
exit /b
*/;
(function () {
    var xhr = (function () {
        var aXMLHttpVers = ['MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
        for (var i = 0; i < aXMLHttpVers.length; i++) {
            try {
                return new ActiveXObject(aXMLHttpVers[i]);
            } catch (error) { }
        }
        showError('Can\'t build XMLHTTP automation object.');
        WScript.Quit(1);
    })(),
        fso = new ActiveXObject('Scripting.FileSystemObject'),
        htmldoc = new ActiveXObject('htmlfile'),
        domain = "http://www.52shici.com",
        outFile = "52shici_posts.txt",
        cacheFile = "cache_52shici_posts.txt",
        tsOut,
        tsCache,
        oCache = {},
        url,
        reCrLfS = /\r?\n */g,
        i,
        l = 300000,
        strOut,
        nodeContent,
        sTitle,
        sAuthor,
        sContent;
    new ActiveXObject('WScript.Shell').CurrentDirectory = fso.GetParentFolderName(WScript.ScriptFullName);
    try {
        tsCache = fso.OpenTextFile(cacheFile, 1, true);
    } catch (e) {
        showError('can not read cache file ' + cacheFile);
        WScript.Quit(1);
    }
    while (!tsCache.AtEndOfStream) {
        oCache[tsCache.ReadLine()] = true;
    }
    tsCache.Close();
    try {
        tsCache = fso.OpenTextFile(cacheFile, 8, true);
    } catch (e) {
        showError(e, 'can not write cache file ' + cacheFile);
        WScript.Quit(2);
    }
    try {
        tsOut = fso.OpenTextFile(outFile, 8, true, -1);//unicode encoding
    } catch (e) {
        showError(e, 'can not write file ' + outFile);
        WScript.Quit(3);
    }
    // main
    for (i = 1; i < l; ++i) {
        if (oCache['' + i]) continue;
        url = 'http://www.52shici.com/posts.php?id=' + i;
        if (!getHTML(url)) continue;
        var node = htmldoc.documentElement.childNodes[1].childNodes[0];
        try {
            for (var m = 0, n = node.childNodes.length; m < n; ++m) {
                var item = node.childNodes[m];
                switch (item.className) {
                    case 'posts-h1':
                        sTitle = 'TTT ' + item.innerText;
                        break;
                    case 'posts-h2':
                        sAuthor = '作者:' + item.firstChild.innerText;
                        break;
                    case 'posts-content':
                        item.removeChild(item.lastChild);
                        sContent = item.innerText;
                        break;
                    default:
                        break;
                }
            }
            strOut = sTitle + '\r\n' + sAuthor + '\r\n' + sContent;
            tsOut.WriteLine(strOut.replace(reCrLfS, '<br/>\r\n'));
            tsCache.WriteLine(i);
        } catch (e) {
            continue;
        }
    }
    tsOut.close();
    tsCache.close();
    WScript.Quit();
    function showError(err, source) {
        WScript.StdOut.WriteLine('[object Error]' === Object.prototype.toString.call(err) ?
            [
                err.name,
                'source: ' + (undefined === source ? '' : source),
                'number: ' + (err.number >>> 0).toString(16),
                'Information: ' + err.message
            ].join('\r\n')
            :
            err);
    }
    function getHTML(url) {
        WScript.StdOut.Write('fetching ' + url + '...')
        xhr.open('GET', url, false);
        xhr.setRequestHeader('Accept', 'text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8');
        xhr.setRequestHeader('Accept-Language', 'en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3');
        xhr.setRequestHeader('host', 'www.52shici.com/');
        xhr.setRequestHeader('Connection', 'close');
        xhr.setRequestHeader('Cache-Control', 'no-cache');
        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');
        try {
            xhr.send();
            if (200 === xhr.status) {
                htmldoc.open();
                var aTxt = xhr.responseText.match(/<div class="sidebar"[\s\S]+(?=<div class="posts-do")/i);
                if (!aTxt) throw false;
                htmldoc.write('<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=GB2312" /></head><body>' + aTxt[0] + '</div></body></html>');
            } else {
                WScript.StdOut.WriteLine('failed. status:' + xhr.status);
                return false
            }
        } catch (e) {
            WScript.StdOut.WriteLine('failed');
            return false;
        } finally {
            htmldoc.close();
        }
        WScript.StdOut.WriteLine('success');
        return true;
    }
})();COPY
1

评分人数

TOP

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

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

TOP

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

TOP

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

先设置52shici.html的根目录路径;
保存 提取52shici_Works.bat
@echo off
REM 设置htmlRoot = 52shici的html文件根目录
set "htmlRoot=E:\PowerShell\WebHttpRequest\52shici\html"
REM 设置txtFilePath = 提取的文本文件名,放在脚本同目录下
set "txtFilePath=提取52shici.txt"
for /f "tokens=1 delims=:" %%A in ('findstr /n "#######*" %0') do more +%%A %0 >"%~dpn0.ps1"
powershell.exe -ExecutionPolicy Bypass -File "%~dpn0.ps1" "%htmlRoot%" "%~dp0%txtFilePath%"
pause
exit /b
################################################################
param([string]$htmlRoot, [string]$txtFilePath)
$sw = [System.IO.StreamWriter]::new($txtFilePath, $true, [System.Text.Encoding]::Unicode)
$sw.AutoFlush = $true
# [string]$scriptPath = [System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Defination)
$htmldoc = New-Object -ComObject htmlfile
$null = $htmldoc.IHTMLDocument2_open()
$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>')
$htmldoc.IHTMLDocument2_close()
[System.IO.Directory]::GetFiles($htmlRoot, '*.html', [System.IO.SearchOption]::AllDirectories)|ForEach-Object {
    $m = [System.IO.File]::ReadAllText($_, [System.Text.Encoding]::UTF8) -match '<div class="main"[\s\S]+(?=<!--main end -->)'
    if ($m) {
        Write-Host "提取$_" -ForegroundColor Green
        try {
            $htmldoc.body.innerHTML = $Matches[0]
            $div = $htmldoc.body.firstChild
            $nodeh1 = $div.getElementsByClassName('works-h1')[0]
            $title = 'TTT ' + $nodeh1.children[0].innerText
            $author = $nodeh1.children[1].innerText
            $content = $div.getElementsByClassName('works-content')[0].innerText
            $sw.WriteLine((($title + "`r`n" + $author + "`r`n" + $content + "`r`n") -replace "`r?`n\s*", "<br/>`r`n"))
        }
        catch {
               
        }
    }
}
Remove-Variable -Name htmldoc
$sw.Close()COPY

TOP

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

提取zgshige.bat
@echo off
REM 设置htmlRoot = zgshige的html文件根目录
set "htmlRoot=E:\PowerShell\WebHttpRequest\zgshige\htmlsrc"
REM 设置txtFilePath = 提取的文本文件名
set "txtFilePath=提取zgshige.txt"
for /f "tokens=1 delims=:" %%A in ('findstr /n "#######*" %0') do more +%%A %0 >"%~dpn0.ps1"
powershell.exe -ExecutionPolicy Bypass -File "%~dpn0.ps1" "%htmlRoot%" "%~dp0%txtFilePath%"
pause
exit /b
################################################################
param([string]$htmlRoot, [string]$txtFilePath)
$sw = [System.IO.StreamWriter]::new($txtFilePath, $true, [System.Text.Encoding]::Unicode)
$sw.AutoFlush = $true
# [string]$scriptPath = [System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Defination)
$htmldoc = New-Object -ComObject htmlfile
$null = $htmldoc.IHTMLDocument2_open()
$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>')
$htmldoc.IHTMLDocument2_close()
[System.IO.Directory]::GetFiles($htmlRoot, '*.html', [System.IO.SearchOption]::AllDirectories)|ForEach-Object {
    $m = [System.IO.File]::ReadAllText($_, [System.Text.Encoding]::UTF8) -match '(?<=<!-- 诗歌正文开始 -->)[\s\S]+(?=<!-- 诗歌正文结束 -->)'
    if ($m) {
        Write-Host "提取$_" -ForegroundColor Green
        try {
            $htmldoc.body.innerHTML = $Matches[0]
            $title = 'TTT ' + $htmldoc.body.getElementsByTagName('h3')[0].innerText
            $author = $htmldoc.body.children[1].children[0].children[0].innerText
            $content = $htmldoc.body.getElementsByClassName('m-lg font14')[0].innerText
            $sw.WriteLine((($title + "`r`n" + $author + "`r`n" + $content + "`r`n") -replace "\r?\n\s*", "<br/>`r`n"))
        }
        catch {
               
        }
    }
}
Remove-Variable -Name htmldoc
$sw.Close()COPY

TOP

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

回复 11# lxh623


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

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

TOP

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

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

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

TOP

返回列表