标题: [文本处理] [已解决]求助:下载并处理网页另生成文件的批处理 [打印本页]
作者: 447219071 时间: 2015-9-18 23:51 标题: [已解决]求助:下载并处理网页另生成文件的批处理
想实现下载网页,提取指定字符之间的内容,像网页源码一样,前面后面不空行,不空格(中间有空格除外),实现生成的文本文件如下- start "" http://www.1.com
- start "" http://www.2.com
- start "" http://www.3.com
- start "" http://www.4.com
复制代码
而本人大致写出的批处理如下,请高手指教:- ping blog.sina.com.cn && goto dianxin || goto tietong ::判断是否电线或铁通,选择最快的网页下载
- :dianxin
- aria2c.exe -d D:\ -o 1.htm http://blog.sina.com.cn/s/blog_823cbc920100v5gj.html ::将网页下载到D盘并改名1.txt
- ???代码不知 >a.txt ::将下载的改名的1.htm提取两个“**********”之间的内容并生成a.txt,其内容见最上面的代码行
- del 1.htm ::删除多余的文件
- exit
- :tietong
- aria2c.exe -d D:\ -o 1.htm http://chren123.blog.163.com/blog/static/253137098201581811214839/ ::将网页下载到D盘并改名1.txt
- ???代码不知 >a.txt ::将下载的改名的1.htm提取两个“**********”之间的内容并生成a.txt,其内容见最上面的代码行
- del 1.htm ::删除多余的文件
- exit
复制代码
上述两个网页的源码见附件
经验证:二楼的代码在手动运行有效,但一旦调用命令形式就无法正常运行
作者: pcl_test 时间: 2015-9-19 10:17
本帖最后由 pcl_test 于 2015-9-19 10:27 编辑
全部htm下载完成后运行- //&cls&dir /b *.htm|cscript.exe -nologo -e:jscript "%~f0"&pause&exit/b
-
- while(!WScript.StdIn.AtEndOfStream){
- var file = WScript.StdIn.ReadLine();
- var fname = file.replace(/\.[^\.]*$/,'');
- var fso = new ActiveXObject("Scripting.FileSystemObject");
- var f = fso.OpenTextFile(file,1);
- var txt = f.ReadAll().match(/\*{8,}[\s\S]+?\*{8,}/m)[0];
- var m = txt.match(/start[^<]+/img);
- var str = '';
- for (var i=0;i<m.length;i++){
- str +=m[i].replace(/\r?\n/g,' ')+'\r\n';
- }
- fso.CreateTextFile(fname+'.txt',2).Write(str);
- }
复制代码
作者: 447219071 时间: 2015-9-20 15:12
回复 2# pcl_test
在桌面运行阁下的代码可以执行,但到其他如下图目录就不能执行,可否将其整合到一个批处理当中?另外这里无需pause
作者: 回家路上 时间: 2015-9-20 15:25
保证批处理和html放在一个文件夹下
作者: 447219071 时间: 2015-9-20 18:50
本帖最后由 447219071 于 2015-9-30 23:36 编辑
回复 4# 回家路上 [code]echo //&cls&dir /b *.htm|cscript.exe -nologo -e:jscript "%~f0"&pause&exit/b >D:\run.bat
echo while(!WScript.StdIn.AtEndOfStream){ >D:\run.bat
echo var file = WScript.StdIn.ReadLine(); >D:\run.bat
echo var fname = file.replace(/\.[^\.]*$/,''); >D:\run.bat
echo var fso = new ActiveXObject("Scripting.FileSystemObject"); >D:\run.bat
echo var f = fso.OpenTextFile(file,1); >D:\run.bat
echo var txt = f.ReadAll().match(/\*{8,}[\s\S]+?\*{8,}/m)[0]; >D:\run.bat
echo var m = txt.match(/start[^<]+/img); >D:\run.bat
echo var str = ''; >D:\run.bat
echo for (var i=0;i<m.length;i++){ >D:\run.bat
echo str +=m.replace(/\r?\n/g,' ')+'\r\n'; >D:\run.bat
echo } >D:\run.bat
echo fso.CreateTextFile(fname+'.txt',2).Write(str); >D:\run.bat
echo } >D:\run.bat
作者: 回家路上 时间: 2015-9-20 19:04
本帖最后由 回家路上 于 2015-9-20 19:07 编辑
第一步,你得到的run.bat并不正确,自己先试试调正确
(1)echo;想要输出特殊字符,需要转义,像要输出这整个run.bat。。。。多调试
(2)“>”会将原有的文本内容都给覆盖了,要换成">>",或最后整体输出到文件- (
- echo;1111
- echo;1111
- echo;1111
- )>D:\run.bat
复制代码
作者: 回家路上 时间: 2015-9-21 15:58
本帖最后由 回家路上 于 2015-9-21 16:00 编辑
回复 1# 447219071
经验证:二楼的代码在手动运行有效,但一旦调用命令形式就无法正常运行????
什么个意思??怎么个验证法??
作者: 447219071 时间: 2015-9-21 16:26
回复 7# 回家路上
经多次测试,用命令行形式调用你的批处理会出现错误,但手动打开没有问题!可能是命令行调用JScript的原因吧。
能否像这样的方式处理,虽然处理慢,可能要针对两个网页写两个命令,但是能正常执行- @echo off
- setlocal enabledelayedexpansion
- set flag=
- for /f "tokens=1* delims=<" %%a in (1.html) do (
- if !flag!==3 goto :eof
- if "%%a" neq "************" if !flag!==2 echo %%a >>a.txt
- echo %%a >%temp%\tmp
- find "********" %temp%\tmp >nul && set /a flag+=1
- )
- del %temp%\tmp
复制代码
作者: 447219071 时间: 2015-9-21 18:06
回复 7# 回家路上
就是用另一批处理调用或CMD下就无效
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |