需要在批处理文件中解析HTML文档中的字符串

时间:2015-03-06 06:00:13

标签: html regex parsing batch-file

我尝试搜索但找不到任何与我需要的内容有关的内容。

这是我的HTML文件的摘录:

<div id="pair_today">
    <div class="left_block">
        <div class="tpl_box">
            <h1 style="margin-top:5px;color:#ec1b1b;">
            <span style="font-size:15px;color:#000;">1 Australian Dollar =</span><br /> 93.663 Japanese Yen</h1>

                        <span style="display:inline-block; margin-top:10px; text-align:right; align:right; font-size:12px; color:#9c9c9c">rate on Fri, 6 March, 2015 15:58:20 (AEDT)</span>

           <a href="http://fx-rate.net/AUD/JPY/currency-transfer/" title="Currenty Transfer from Australia to Japan" style="float:right" class="btn" onclick="ga('send','event', {'eventCategory': 'CurrencyTransfer', 'eventAction' : 'click','eventLabel':'Today Box'});"><span class="btn-ico btn-ico-go">Get Rate</span></a>
           </span>

我需要解析第5行的93.663值。 每次运行脚本时,此值都会有所不同,因此我认为正则表达式是专门针对此值的最佳方式。

我一直在修补/ f循环,但我不知道如何在脚本中实现正则表达式。

谢谢你们!

1 个答案:

答案 0 :(得分:2)

使用Windows Scripting Host(VBscript或JScript)。使用htmlfile COM对象。解析DOM。然后,您可以根据需要使用正则表达式按innerText

你走了。将其另存为.bat文件,根据需要修改set "htmlfile=test.html"行,然后运行它。 (派生自this answer。WSH中htmlfile COM对象的文档很少;但如果您想了解更多相关内容,请遵循面包屑。)

@if (@CodeSection == @Batch) @then

@echo off
setlocal

set "htmlfile=test.html"

rem // invoke JScript hybrid code and capture its output
for /f %%I in ('cscript /nologo /e:JScript "%~f0" "%htmlfile%"') do set "converted=%%I"

echo %converted%

rem // end main runtime
goto :EOF

@end // end batch / begin JScript chimera

var fso = WSH.CreateObject('scripting.filesystemobject'),
    DOM = WSH.CreateObject('htmlfile'),
    htmlfile = fso.OpenTextFile(WSH.Arguments(0), 1),
    html = htmlfile.ReadAll();

DOM.write(html);
htmlfile.Close();

var scrape = DOM.getElementById('pair_today').getElementsByTagName('h1')[0].innerText;
WSH.Echo(scrape.match(/^.*=\s+(\S+).*$/)[0]);

你知道,只要你正在调用Windows Script Host,如果你使用wget或类似的方式获取你的html文件,你就可以摆脱这种依赖。除非您下载的页面使用了复杂的Cookie和会话重定向系列,否则您可以使用Microsoft.XMLHTTP COM对象替换wget并通过XHR下载页面(或者那些思路较少的人会说,Ajax)。 (基于fetch.bat。)

@if (@CodeSection == @Batch) @then

@echo off
setlocal

set "from=%~1"
set "to=%~2"
set "URL=http://host.domain/currency?from=%from%&to=%to%"

for /f "delims=" %%I in ('cscript /nologo /e:jscript "%~f0" "%URL%"') do set "conv=%%I"

echo %conv%

rem // end main runtime
goto :EOF

@end // end batch / begin JScript chimera

var x = WSH.CreateObject("Microsoft.XMLHTTP"),
    DOM = WSH.CreateObject('htmlfile');

x.open("GET",WSH.Arguments(0),true);
x.setRequestHeader('User-Agent','XMLHTTP/1.0');
x.send('');
while (x.readyState!=4) {WSH.Sleep(50)};

DOM.Write(x.responseText);

var scrape = DOM.getElementById('pair_today').getElementsByTagName('h1')[0].innerText;
WSH.Echo(scrape.match(/^.*=\s+(\S+).*$/)[0]);