我尝试搜索但找不到任何与我需要的内容有关的内容。
这是我的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循环,但我不知道如何在脚本中实现正则表达式。
谢谢你们!
答案 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]);