Windows批量/解析来自html网页

时间:2016-04-06 16:55:46

标签: html batch-file

是否可以使用Windows批处理从web html页面解析数据?

假设我有一个网页:www.domain.com/data/page/1 页面源html:

...
<div><a href="/post/view/664654"> ....
....

在这种情况下,我需要从网页上获取/发布/查看/ 664654。

我的想法是遍历www.domain.com/data/page/1 ...#(到某个给定的数字)并提取所有/ post / view。然后我会有一个链接列表,从每个链接我将提取href值(图像或视频)。

到目前为止,只有当我知道使用wget的确切链接时,我才能成功下载图像或视频。但我不知道如何(如果可能的话)解析HTML数据。

修改

<body>
<nav>
    <section>links I dont need</section>
</nav>
<article>
    <section>links I need</section>
</article>

2 个答案:

答案 0 :(得分:1)

将结构化标记解析为分层对象更好,而不是将其作为平面文本进行拼写。这样你就不会依赖于你正在解析的数据的格式化(它是否缩小,间距是否已经改变,等等)。

批处理语言非常适合解析HTML,XML,JSON等标记语言。在这种情况下,使用混合脚本并借用JScript或PowerShell方法来帮助它们非常有用。抓取你需要的数据。这是一个演示批处理+ JScript混合脚本的示例。使用.bat扩展名保存并运行。

@if (@CodeSection == @Batch) @then
@echo off & setlocal

set "url=http://www.domain.com/data/page/1"

for /f "delims=" %%I in ('cscript /nologo /e:JScript "%~f0" "%url%"') do (
    rem // do something useful with %%I
    echo Link found: %%I
)

goto :EOF
@end // end batch / begin JScript hybrid code

// returns a DOM root object
function fetch(url) {
    var XHR = WSH.CreateObject("Microsoft.XMLHTTP"),
        DOM = WSH.CreateObject('htmlfile');

    XHR.open("GET",url,true);
    XHR.setRequestHeader('User-Agent','XMLHTTP/1.0');
    XHR.send('');
    while (XHR.readyState!=4) {WSH.Sleep(25)};
    DOM.write('<meta http-equiv="x-ua-compatible" content="IE=9" />');
    DOM.write(XHR.responseText);
    return DOM;
}

var DOM = fetch(WSH.Arguments(0)),
    links = DOM.getElementsByTagName('a');

for (var i in links)
    if (links[i].href && /\/post\/view\//i.test(links[i].href))
        WSH.Echo(links[i].href);

答案 1 :(得分:-1)

如果您只需要获取/post/view/664654,则可以使用grep命令,例如

grep -o '/post/view/[^"]\+' *.html

要解析更复杂的HTML,您可以使用HTML-XML-utilspup